2017-01-12 7 views
-1

У меня есть код:Препроцессор мультипроцессора в 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 компилятор не поддерживает многопроцессорный препроцессор? O_O

upd: hm .... где брекеты? о_О

$ 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

Убедитесь, что установлены последние обновления для вашего компилятора. Также проверьте с VS2017, и если один или оба повторите ошибку, отправьте отчет об ошибке в Microsoft Connect. – rubenvb

+1

Я не получаю downvotes. Вопрос может быть недостаточно написанным и содержать многие смайлики, но проблема явно узнаваема, и OP даже предоставил MCVE. –

ответ

-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; 
} 
+0

Я не уверен, что это ошибка. Правила макрорасширения не являются интуитивно очевидными, но я слишком долго работал, чтобы дать ответ. –

+0

Просто удаление '0' также работает и не требует другого' # define' –

+0

Или добавляет дополнительную пару круглых скобок вокруг: '#define XUJ (x)); if (x) {test2(); } __IGNORE __ ((0) ' –

 Смежные вопросы

  • Нет связанных вопросов^_^