天天看点

LINUX C中如何定义可变参数的宏

一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.

1. __VA_ARGS__

__VA_ARGS__ 将 "..." 传递给宏 . 如

#define debug(format, ...) fprintf(stderr, format, __VA_ARGS__)      

2. GCC的复杂宏

GCC使用一种不同的语法,从而可以给可变参数一个名字,如同其它参数一样.

#define debug(format, args...) fprintf (stderr, format, args)      
#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)