可變引數巨集(用於除錯)
阿新 • • 發佈:2019-02-12
這個是在這裡看到的(包括這個程式碼, 我自己理解了下,記一下)
#include <stdio.h>
#define __DEBUG__
#ifdef __DEBUG__
#define DEBUG(format, ...) printf("檔案:"__FILE__ "\n行號:%d\n輸出:"format"\n", __LINE__, ##__VA_ARGS__)
#else
#define DEBUG(format, ...)
#endif
int main(int argc, char **argv) {
char str[] = "Hello World" ;
float a = 889.5;
DEBUG("A ha, check me: %s%.2f", str, a);
return 0;
}
執行測試輸出結果:
原始的測試行:
#define DEBUG(format,...) printf("File: "__FILE__"\nLine: %05d \n"format"\n", __LINE__, ##__VA_ARGS__)
%05d 輸出佔5格,前面不足的,補零.如果%5d,佔5格,不足的空格.
format
引數名, 前後相同就行了,__VA_ARGS__
是可變引數巨集, 巨集引數對應前面的三個點(省略號),##
的意思是,如果可變引數(format, 就是後面的%s)被忽略或為空,將使前處理器(preprocessor )去除掉它前面的那個逗號另外:
...
只能放最後.
經測試, format 只能放第一個逗號前,且挨著逗號,...
和對應的_VA_ARGS_
只能放在最後
也不用管多了, 就按照這個格式來就是了.