1. 程式人生 > >可變引數巨集(用於除錯)

可變引數巨集(用於除錯)

這個是在這裡看到的(包括這個程式碼, 我自己理解了下,記一下)

#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_只能放在最後

也不用管多了, 就按照這個格式來就是了.