2016-02-10 2 views
1

Я знаю, что я могу сделать некоторые сложные условия, такие как:Multiple определенные условия предварительной обработки

#if defined(A) || defined(B) || defined(C) 

Но, если я хочу, состояние вроде:

A || (B && C) 

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

Я пробовал:

#if defined(A) || (defined(B) && defined(C)) 

и она работает. Но только для того, чтобы убедиться, что это не зависит от платформы/компилятора или чего-либо еще, потому что я не мог найти такого примера.

Благодаря

+1

Я предполагаю, что вы имеете в виду '#if defined (A) || (определено (B) && определено (C)) '? – Lundin

ответ

2

В C99 стандартной

6.10 директива Предобработки

если-группа:

#ifпостоянного выражения новой строка группа неавтоматического

6. 6,3

Постоянных выражения не должны содержать назначение, увеличение, уменьшение, вызов функции или оператор запятой, кроме случаев, когда они содержатся в подвыражения, не оцениваемая

defined(A) || (defined(B) && defined(C)), конечно, действует постоянное выражение , поэтому он должен работать

0

Да, он должен работать, потому что препроцессор будет проверять первые круглые скобки.

Смежные вопросы