Подтвердить что ты не робот

Можно ли использовать логические операторы с препроцессором?

Мне интересно, возможно ли иметь инструкцию для препроцессора ИЛИ или И? У меня есть этот код, где я хочу работать под тегами _DEBUG или _UNIT_TEST (?).

Я хочу что-то вроде следующего:

#if _DEBUG || _UNIT_TEST
  //Code here
#endif

Если это невозможно, существует ли решение обходного пути для достижения того же самого результата без дублирования кода с помощью #elseif?

4b9b3361

Ответ 1

#if defined _DEBUG || defined _UNIT_TEST 
  //Code here 
#endif 

Вы также можете использовать операторы AND и NOT. Например:

#if !defined _DEBUG && defined _UNIT_TEST 
  //Code here 
#endif 

Ответ 2

#if принимает любое выражение С++ интегрального типа (1), которое компилятору удается оценить во время компиляции. Поэтому да, вы можете использовать || и &&, если вы используете defined(SOMETHING) для проверки на определенность.

(1): ну, это немного более ограниченное; для nitty-gritty см. ограничения здесь (в разделе "с этими дополнительными ограничениями" ).

Ответ 3

#if defined(_DEBUG) || defined(_UNIT_TEST)
  //Code here
#endif

Также для записи это #elif, а не #elseif.