为什么#if预处理器不起作用?

1 c preprocessor-directive

使用以下代码,当我打算获得"NOT VGA"时,我总是将"VGA"作为输出

#include<stdio.h>
#include<conio.h>
#define ADAPTER NVGA
#if ADAPTER==VGA
 int main()
 {
 printf("VGA");
 getch();
 return 0;
 }
#else
     int main()
 {
 printf(" NOT VGA");
 getch();
 return 0;
 }
 #endif
Run Code Online (Sandbox Code Playgroud)

use*_*733 5

问题是在哪里VGANVGA界定?

如果没有定义,它们将0根据C标准(N1570 - 6.10.1条件包含 - 第4段)相等:

在由于宏扩展和定义的一元运算符执行的所有替换之后,所有剩余的标识符(包括与关键字词法相同的标识符)被替换为pp-number 0,然后每个预处理标记被转换为标记.

这意味着你的比较#if 0==0,这是相同的#if 1.

要解决此问题,您需要定义两者VGANVGA具有不同的值:

#define VGA  1
#define NVGA 2
Run Code Online (Sandbox Code Playgroud)