41

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

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

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

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

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

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

ответ

63

Try:

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

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

+1

Скобки являются необязательными –

+1

Спасибо, вы были правы. Именно то, что я искал. Это отлично работает :) – Lefteris

3

Вы должны использовать «если определено», а не «» IfDef

#if defined _WIN32 || defined _WIN64 

упс опечатка, вам нужен второй «определен», поэтому ваш тест не удается. Думай о нем, как «определенной _WIN32» бытие один оператор возвращает истинное/ложное

+2

Паренс являются необязательно, но второй определяется не. :) –

+0

Извините - особенно, поскольку это было именно то, что было не так с кодом OP! –

3

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

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

Дополнительная информация here

6

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

0

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

#if defined(A) || defined(B) 
    #include <whatever.h> 
#endif 
Смежные вопросы