У меня есть следующий код:
#include <stdio.h>
enum {A, B};
#define C A
int main() {
#if C == B
printf("%d==%d\n", C, B);
#else
printf("%d!=%d\n", C, B);
#endif
}
, что, на удивление, дает вывод:
0==1
Теперь я понимаю, что код неправильный, потому что значения перечисления неизвестны препроцессору. Что я не понимаю, так это почему не генерируется ошибка ... A и B должны быть неопределенными во время предварительной обработки, как этот препроцессор не выдает ошибку?