Есть две возможности, и я не могу сказать, какой. Скорее всего, это потому, что ни NVGA
, ни VGA
не являются #define
d макросом, они оба оцениваются как 0 в #if
и поэтому считаются равными. (Это правило языка.) Вторая возможность заключается в том, что в вашей системе stdio.h
или conio.h
определяется NVGA
- VGA
.
Чтобы выяснить, какие, скомпилировать эту программу и посмотреть, что происходит:
#include <stdio.h>
#include <conio.h>
/* these numbers are chosen at random */
#define NVGA 8446
#define VGA 13060
#define ADAPTER NVGA
int main(void)
{
#if ADAPTER == VGA
puts("VGA");
#else
puts("NOT VGA");
#endif
getch();
return 0;
}
Если он производит вывод вы ожидали (т.е. «НЕ VGA»), ваша проблема является первой один. Если у вас возникла ошибка в переопределении NVGA
или VGA
, ваша проблема будет второй.
возможно дубликат [Как сравнить строки в C условных препроцессора директив] (http://stackoverflow.com/questions/2335888/how-to-compare-string-in-c-условно-препроцессор-директивы) – Mauren
@Mauren OP не пытается сравнивать * строки * в '# if', но (скорее всего) идентификаторы не' # define'd для любого значения (поэтому они оценивают до нуля в '# if'). – zwol
@ Zack ах я вижу. Я не понял. – Mauren