1.#include <stdio.h>
#include <malloc.h>
#define MALLOC(type, n) (type*)malloc(n * sizeof(type))
int main()
{
int* p = MALLOC(int, 5);
int i = 0;
for(i=0; i<5; i++)
{
p[i] = i + 1;
printf("%d
", p[i]);
}
free(p);
return 0;
}
2.#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
int _min_(int a, int b)
{
return a < b ? a : b;
}
int main()
{
int i = 1;
int j = 10;
printf("%d
", mul(add(1, 2), add(3, 4)));
printf("%d
", _min_(i++, j));
return 0;
}
3.#include <stdio.h>
#define ADD(a, b) a + b
#define MUL(a, b) a * b
#define _MIN_(a, b) ((a) < (b) ? (a) : (b))
int main()
{
int i = 1;
int j = 10;
printf("%d
", MUL(ADD(1, 2), ADD(3, 4)));
printf("%d
", _MIN_(i++, j));
return 0;
}
4.#include <stdio.h>
#define RESET(p, len) while( len > 0) ((char*)p)[--len] = 0
void reset(void* p, int len)
{
while( len > 0 )
{
((char*)p)[--len] = 0;
}
}
int main()
{
int array[] = {1, 2, 3, 4, 5};
int len = sizeof(array);
reset(array, len);
RESET(array, len);
return 0;
}
说明:
1.可变参数是C语言提供的一种函数设计技巧
2.可变参数的函数提供了一种更方便的函数调用方式
3.可变参数必须顺序的访问
4.无法直接访问可变参数列表中间的参数值
5.宏和函数并不是竞争对手
6.宏能够接受任何类型的参数, 效率高 效率高, 易出错 易出错
7.函数的参数必须是固定类型, 效率稍低 效率稍低, 不易出错 不易出错
8.宏可以实现函数不能实现的功能