1. 程式人生 > >C/C++中巨集使用(關於## 和...變參巨集)

C/C++中巨集使用(關於## 和...變參巨集)

 替換為:
 
fprintf(stderr,"Error!/n",);
這是一個語法錯誤,不能正常編譯。這個問題一般有兩個解決方法。首先,GNU CPP提供的解決方法允許上面的巨集呼叫寫成:
myprintf(templt);
而它將會被通過替換變成:
fprintf(stderr,"Error!/n",);
很明顯,這裡仍然會產生編譯錯誤(非本例的某些情況下不會產生編譯錯誤)。除了這種方式外,c99和GNU CPP都支援下面的巨集定義方式:
#define myprintf(templt, ...) fprintf(stderr,templt, ##__VAR_ARGS__)
這時,##這個連線符號充當的作用就是當__VAR_ARGS__為空的時候,消除前面的那個逗號。那麼此時的翻譯過程如下:
myprintf(templt);