Использование логических операторов с макросами

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

#ifdef MACRO1 || MACRO2

void foo()
{


}

#endif

Как мне это сделать на C?


person Bruce    schedule 04.12.2012    source источник


Ответы (2)


Помимо #ifdef, препроцессор поддерживает более общую инструкцию #if; на самом деле #ifdef MACRO — это сокращение для #if defined(MACRO), где defined — это «функция препроцессора», которая возвращает 1, если макрос определен; Итак, вы можете сделать:

#if defined(MACRO1) || defined(MACRO2)

void foo()
{


}

#endif
person Matteo Italia    schedule 04.12.2012
comment
В чем проблема в приведенном ниже коде? Какова альтернатива в случае, если такое использование является неправильным? #define CUSTOM_METHOD 1 #define ARDUINO_METHOD 2 #define TIMER_DELAY_METHOD CUSTOM_METHOD #если определено (TIMER_DELAY_METHOD != CUSTOM_METHOD) || определено(TIMER_DELAY_METHOD!=ARDUINO_METHOD) #error Метод таймера не определен #endif // определено - person Rajesh; 04.01.2018
comment
Я думаю, что понял, и следующий код, кажется, работает #endif // определено - person Rajesh; 04.01.2018

Вот версия НЕ, если необходимо:

#if !defined(MACRO1) && !defined(MACRO2)
...
#endif
person nvd    schedule 16.12.2014