Действительно ли макрос препроцессора "#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