私は多くのパラメータセットが "マクロ化"されたシステムを持っています( "#define name value、value、value"という形式のマクロです。)これらをマクロに渡したいのですが、 。マクロ化されたパラメータ
例:ビジュアルCIのGETで
void fn(int a, int b, int c){ return; }
#define MACRO_1(a, b, c) fn(a, b, c)
#define MACRO(...) MACRO_1(__VA_ARGS__)
#define PARAM1 1
#define PARAM2 2, 2
#define PARAM3 3, 3, 3
int main(int argc, char * argv[]){
MACRO(0,0,0);
MACRO(PARAM1,1, 1);
MACRO(PARAM2,2);
MACRO(PARAM3);
return 0;
}
:。これは、Visual C++コンパイラのバグです
1>c:\main.c(10): warning C4003: not enough actual parameters for macro 'MACRO_1'
1>c:\main.c(10): error C2059: syntax error : ','
1>c:\main.c(11): warning C4003: not enough actual parameters for macro 'MACRO_1'
1>c:\main.c(11): error C2059: syntax error : ','
1>c:\main.c(12): warning C4003: not enough actual parameters for macro 'MACRO_1'
1>c:\main.c(12): error C2059: syntax error : ','
1>c:\main.c(13): warning C4003: not enough actual parameters for macro 'MACRO_1'
1>c:\main.c(13): error C2059: syntax error : ','
Visual Cのバグのように見えます - 'MACRO'は任意の数の引数(...)をとり、'# 'や' ## 'を使用しないので、引数(' PARAM1'、 'PARAM2'など)は、本文中の' MACRO_1'が走査されるか展開される前に展開されるべきです。 –