Многопроходный препроцессор в MSVC?

У меня есть код:

#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;
}

-1

Решение

Это странная ошибка 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;
}
-2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector