Действительно ли макрос препроцессора "#define TRUE FALSE"?
Является ли следующий оператор определения действительным в C?
#define TRUE FALSE
Ответы
Ответ 1
Вы должны помнить, что макросы препроцессора просто заменяются. Если вы делаете, например,
#define TRUE FALSE
то процессор просто заменяет все места, где он находит TRUE
, будет заменен любым FALSE
.
И действительно, это хорошее определение. И да, это, скорее всего, изменит рабочий процесс программы, возможно, очень неожиданными способами, которые могут даже вызвать поведение undefined.
Ответ 2
Так как мы должны ожидать, что TRUE
уже определен, когда FALSE
также определен.
Таким образом, в этом случае это будет переопределением и недействительным.
Если вы останетесь стажером, #define TRUE FALSE
будет действителен для стандарта, но будет недействительным в соответствии со всеми логиками, которые я мог себе представить.
Но я уже часто видел:
#define FALSE 0
#define TRUE !FALSE