宏 #,##,_ _VA_ARGS_ _
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
宏里面使用:
一、# 轉為字符串
#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x)) 如果使用PSQR("test2”),則編譯出錯;而使用PSQR(test2),則ok;
#define TEST2(p) (cout<<#p<<endl); 如果TEST2("test2"); 輸出”test2“。奇怪?
二、## 連接兩個參數
#define XNAME(n) x##n,如果n為a,則展開后為xa。
三、_ _VA_ARGS_ _,C99引入的。
#define PR(...) printf(_ _VA_ARGS_ _)
#define qWiFiDebug(format, ...) printf("[WiFi] "format" File:%s, Line:%d, Function:%s", ##__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__);
#define pr_err(format, ...) fprintf(stderr, format, ## __VA_ARGS__)
宏前面加上##的作用在于,當可變參數的個數為0時,這里的##起到把前面多余的","去掉的作用,否則會編譯出錯