Текст внутри пары ifdef/endif
или ifndef/endif
будет оставлен или удален препроцессором в зависимости от условий. ifdef
означает «если определено следующее», а ifndef
означает «если следующее не определено ».
Итак:
#define one 0
#ifdef one
printf("one is defined ");
#endif
#ifndef one
printf("one is not defined ");
#endif
эквивалентно:
printf("one is defined ");
, поскольку one
определено, поэтому ifdef
является истинным, а ifndef
- ложным. Неважно, что он определяет как . Подобный (лучше на мой взгляд) кусок кода будет выглядеть так:
#define one 0
#ifdef one
printf("one is defined ");
#else
printf("one is not defined ");
#endif
, поскольку это более четко определяет намерение в данной конкретной ситуации.
В вашем конкретном случае текст после ifdef
не удаляется, поскольку определено one
. Текст после ifndef
удаляется по той же причине. В какой-то момент потребуется две закрывающие строки endif
, и первая заставит строки снова включиться, как показано ниже:
#define one 0
+--- #ifdef one
| printf("one is defined "); // Everything in here is included.
| +- #ifndef one
| | printf("one is not defined "); // Everything in here is excluded.
| | :
| +- #endif
| : // Everything in here is included again.
+--- #endif