Препроцессор #if a == b не поддерживается или не так?

Я пытался скомпилировать этот небольшой код. Но, похоже, я вижу неправильный результат. Любая идея, где я ошибаюсь?

int a=2,b=3;
#if a==b
 printf("\nboth are equal.\n"); 
#endif

Вывод:

оба равны.

1 ответ

Препроцессор работает в режиме предварительной обработки, который имеет дело с директивами препроцессора, такими как #include, #define, #if-#else-#endif. И C-код, такой как int a=2,b=3; анализируется и компилируется после этого во время компиляции, поэтому вы не должны тестировать это.

Фактически, символы a и b, обрабатываемые препроцессором, должны быть пустыми, если вы ранее не определяли их. Вот почему a==b верно.

Редакция:

Вот несколько примеров:

int a = 2;
int b = 3;
// To test at runtime
if (a == b)
 puts("They are equal!");

#define A 2
#define B 3

// To test at preprocessing time
#if A==B
// This message is printed at runtime
puts("They are equal!");
#endif

// To test at preprocessing time
#if A==B
// This message is printed at preprocess-time
#error "They are equal!"
#endif

licensed under cc by-sa 3.0 with attribution.