C Препроцессор проверяет определенность нескольких макросов

StackOverflow https://stackoverflow.com/questions/965700

Вопрос

Я искал на сайте, но не нашел ответа, который искал, поэтому вот очень быстрый вопрос.

Я пытаюсь сделать что-то вроде этого:

#ifdef _WIN32 || _WIN64
     #include <conio.h>
#endif

Как я могу это сделать?Я знаю, что _WIN32 определен как для 32-, так и для 64-битных окон, поэтому для обнаружения окон меня вполне устраивает любой из них.Меня больше интересует, могу ли я использовать подобные логические операторы с директивами препроцессора, и если да, то как, поскольку вышеизложенное не работает.

Компилируя с помощью gcc, я получаю:

предупреждение:дополнительные токены в конце директивы #ifdef, и по сути он просто принимает первый МАКРОС и игнорирует остальные.

Это было полезно?

Решение

Пытаться:

#if defined(_WIN32) || defined(_WIN64)
// do stuff
#endif

А определенный Макрос проверяет, определено ли имя, и позволяет применять к результату логические операторы.

Другие советы

Вы должны использовать #if и специальный оператор defined

Я думаю, что это должно быть возможно так:

#if defined block1 || defined block2 /*or any other boolean operator*/
   /*Code*/
#endif

Больше информации здесь

Использование определено:

#if defined(A) || defined(B)
    #include <whatever.h>
#endif
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top