我有代码:
#define __IGNORE__(...)
#define XUJ(x) ); if (x) { test2(); } __IGNORE__(0
void test2() {
}
void test() {
}
int main() {
int x = 0;
test(XUJ(x));
return 0;
}
GCC编译,但cl.exe有错误:
$ cl 1.cpp
1.cpp(14): error C2059: syntax error: ;
但是......如果我将宏解压缩到:
test(); if (x) { test2(); } __IGNORE__(0);
它正常编译。 MSVC 2015编译器不支持多通道预处理器? O_O
UPD: 嗯....括号? O_O
$ cl /E 1.cpp
1.cpp
#line 1 "1.cpp"
void test2() {
}
void test() {
}
int main() {
int x = 0;
test(); if (x) { test2(); } ;
return 0;
}
答案 0 :(得分:-2)
奇怪的MSVC错误-_-
我将0移动到宏 - 错误修复-_-
#define KEEEK 0
#define __IGNORE__(...)
#define XUJ(x) ); if (x) { test2(); } __IGNORE__(KEEEK
void test2() {
}
void test() {
}
int main() {
int p = 0;
test(XUJ(p));
return 0;
}