Могут ли директивы препроцессора #if быть вложены в C ++? - PullRequest
75 голосов
/ 13 июля 2011

У меня есть вопрос о директивах препроцессора в c ++:

Например:

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif

Можем ли мы использовать его таким образом, и может ли компилятор C ++ соответствовать ifndef и endif правильно?

Ответы [ 3 ]

100 голосов
/ 13 июля 2011

Да, мы можем. Оператор #endif соответствует предыдущему #if #ifdef или #ifndef и т. Д., Для которого не было соответствующего #endif.

, например

#if  ----------|
#if  -----|    |
#endif ---|    |
#endif --------|
42 голосов
/ 13 июля 2011

Да, вы можете вкладывать #if / #endif блоки.В некоторых стилях программирования на C вам нужно написать

#ifdef CONDITION1
# ifdef CONDITION2
# endif
#endif

, используя пробелы для обозначения уровня вложенности.

0 голосов
/ 13 июля 2011

В вашем коде раздел #ifndef QUESTION будет отброшен, если вы не #undef QUESTION.

Удачи!

...