__VA_ARGS__是C语言设定的一个预定义宏,用于处理可变参数的参数列表。通常用在宏定义中,以便宏可以接收不定数量的参数,并将他们作为整体处理。 通常的函数参数列表都是固定的,但也存在着不定参数数量的函数,如:printf,为了定义可以处理不同参数个数的宏,C99标准引入了VA_ARGS,下列的代码均在C99及C99以上标准的...
MACRO("hello, world\n");//这里没有可变参数, 所以要用##__VA_ARGS__MACRO("hello, %s\n","fanrey");return0; } 编译:gcc -o vaargs vaargs.c 运行: ./vaargs vaargs.c main [16]: hello vaargs.c main [17]: world, 100 hello, world hello, fanrey...
MACRO("hello, world\n"); //这里没有可变参数, 所以要用##__VA_ARGS__ MACRO("hello, %s\n", "fanrey"); return 0; } 编译:gcc -o vaargs vaargs.c 运行: ./vaargs vaargs.c main [16]: hello vaargs.c main [17]: world, 100 hello, world hello, fanrey...
而在msvc中,__VA_ARGS__所包含的所有元素将被作为B的1个参数进行B的替换。所以,如果直接实现B的操...
这里,‘…’指可变参数。这类宏在被调用时,它(这里指‘…’)被表示成零个或多个符号,包括里面的逗号,一直到到右括弧结束为止。当被调用时,在宏体(macro body)中,那些符号序列集合将代替里面的__VA_ARGS__标识符。更多的信息可以参考CPP手册。 GCC始终支持复杂的宏,它使用一种不同的语法从而可以使你可以给...
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 这里,'...'指可变参数。这类宏在被调用时,它(这里指'...')被表示成零个或多个符号,包括里面的逗号,一直到到右括弧结束为止。当被调用时,在宏体(macro body)中,那些符号序列集合将代替里面的__VA_ARGS__标识符。更多的信息可以...
MACRO("hello, world\n"); //这里没有可变参数, 所以要用##__VA_ARGS__ MACRO("hello, %s\n", "fanrey"); return 0; } 编译:gcc -o vaargs vaargs.c 运行: ./vaargs vaargs.c main [16]: hello vaargs.c main [17]: world, 100 ...
printf(fmt,__VA_ARGS__)新的C99规范⽀持了可变参数的宏 具体使⽤如下:以下内容为程序代码:#include <stdarg.h> #include <stdio.h> #define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)int main() { LOGSTRINGS("hello, %d ", 10); return 0; } 但现在似乎只有gcc才⽀持。
MACRO("hello, world\n"); //这里没有可变参数, 所以要用##__VA_ARGS__ MACRO("hello, %s\n", "fanrey"); return 0; } 编译:gcc -o vaargs vaargs.c 运行: ./vaargs vaargs.c main [16]: hello vaargs.c main [17]: world, 100 ...
缺省号代表一个可以变化的参数表。使用保留名 __VA_ARGS__把参数传递给宏。当宏的调用展开时,实际的参数就传递给printf()了。例如: Debug(“Y = %d\n”, y); 而处理器会把宏的调用替换成: printf(“Y = %d\n”, y); 因为debug()是一个可变参数...