У меня есть код:
#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 не поддерживает многопроходный препроцессор? О_О
UPD:
хм …. где брекеты? о_О
$ 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;
}
Это странная ошибка 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;
}
Других решений пока нет …