天天看點

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__)