下零ARGS我想使用的宏如下所示:## __ VA_ARGS__不吞嚥時逗號C99
#define x(...) y(a,##__VA_ARGS__,b)
要擴大,像這樣:
x(); -> y(a,b);
x(1); -> y(a,1,b);
隨着-std=gnu99
,它的工作原理完美。
隨着-std=c99
但是,它看起來像這樣:
x(); -> y(a,,b);
x(1); -> y(a,1,b);
的##
正在沒有什麼區別 - 這不是吞嚥逗號。
在C99下的其他用法中,例如#define x(a,...) y(a,##__VA_ARGS__)
,逗號吞嚥工作正常。
我可以做什麼,如果有的話,以獲得所需的逗號吞嚥行爲叮鐺聲的-std=c99
,無論是與GNU擴展##
或其他方法?
那麼,如何在實現方面工作(即如何函數消耗可變參數)? – trojanfoe
@trojanfoe感謝您的評論,但這不在此問題的範圍內。 (這不是一個XY問題。) – Max
@trojanfoe當然:如果沒有參數,我使用這個宏來調用'a()',或者如果有一個參數,我使用'b(x)':'GET_MACRO(_0 ,## __ VA_ARGS__,b,a)(__ VA_ARGS __)'。 – Max