歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux C中如何定義可變參數的宏

Linux C中如何定義可變參數的宏

日期:2017/3/1 9:47:00   编辑:Linux編程

一般在調試打印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)

這和第一條的宏例子是完全一樣的,但是這麼寫可讀性更強並且更容易進行描述.

3. ##__VA_ARGS__

上面兩個定義的宏,如果出現 debug("A Message")的時候,由於宏展開後有個多余的逗號,所以將導致編譯錯誤.

為了解決這個問題,CPP 使用一個特殊的"##"操作,格式如下:

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

這裡,如果可變參數被忽略或為空,"##"操作將使預處理器(preprocessor)去除掉它前面的那個逗號.

Copyright © Linux教程網 All Rights Reserved