c语言中如何实现不定长参数的宏?

Python018

c语言中如何实现不定长参数的宏?,第1张

宏很难实现变长参数,不过c提供了函数来处理,在c中printf,scanf等函数就是处理变长参数列表的。

如:

#include <stdio.h>

#include <stdarg.h>

void print_ints(int, num_of_args, ...)

{

int total = 0, i

va_list ap

va_start(ap, num_of_args)

while(num_of_arg--){

i = va_arg(ap, int)

printf("%d\n", i)

total += i

}

printf("Total is %d \n", total)

va_end(ap)

}

如果使用

print_int(3, 20, 35, 15)

来调用,则输出:

20

35

15

Total is 70

有关函数:

va_start(argptr, parm) 使用argptr对参数列表和第二个参数parm的名称进行初始化

va_arg(argptr, type) 返回参数表中的下一个参数,它必须包含所指定的type

va_end(argptr) 终止参数读取

宏定义数组无法动态增加长度

只能通过修改宏的方式,重新编译增加长度.

比如

#define N 100

int a[N],b[N],c[N]

定义的a b c都是100个元素.

修改 #define N 1000

那就都是1000个元素了.

一样方式就可以

#define my_Printf(fmt, ...) ex_printf(fmt, ##__VA_ARGS__)

也可以

#define my_Printf(fmt, args...) ex_printf(fmt, ##args)

手机打字,没管大小写,领会精神就好