天天看點

可變參數宏...和__VA_ARGS__

__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