__VA_ARGS__ 是一個可變參數的宏,很少人知道這個宏,這個可變參數的宏是新的C99規範中新增的,目前似乎隻有gcc支援(VC6.0的編譯器不支援)。
實作思想就是宏定義中參數清單的最後一個參數為省略号(也就是三個點)。這樣預定義宏_ _VA_ARGS_ _就可以被用在替換部分中,替換省略号所代表的字元串。比如:
#define PR(...) printf(__VA_ARGS__)
int main()
{
int wt=1,sp=2;
PR("hello\n");
PR("weight = %d, shipping = %d",wt,sp);
return 0;
}
輸出結果:
hello
weight = 1, shipping = 2
省略号隻能代替最後面的宏參數。
#define W(x,...,y)錯誤!
轉自:http://www.cnblogs.com/pengyingh/articles/2407265.html