Может ли #if директивы pre-processor быть вложенными в С++?

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

Например:

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif

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

Ответ 1

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

например.

#if  ----------|
#if  -----|    |
#endif ---|    |
#endif --------|

Ответ 2

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

#ifdef CONDITION1
# ifdef CONDITION2
# endif
#endif

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

Ответ 3

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

Удачи!