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

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

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

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

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

Компиляция с gcc я получаю:

warning: дополнительные токены в конце директивы #ifdef, и в основном он просто берет первый MACRO и игнорирует остальные.

Ответ 1

Try:

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

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

Ответ 2

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

Ответ 3

Вы должны использовать "if defined", а не "ifdef"

#if defined _WIN32 || defined _WIN64

oops typo, вам понадобится вторая "определенная", почему ваш тест терпит неудачу. Подумайте об этом как о "определенном _WIN32", являющемся единственным утверждением, возвращающим true/false

Ответ 4

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

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

Дополнительная информация здесь

Ответ 5

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

#if defined(A) || defined(B)
    #include <whatever.h>
#endif