使用以下代码,当我打算获得"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)
问题是在哪里VGA和NVGA界定?
如果没有定义,它们将0根据C标准(N1570 - 6.10.1条件包含 - 第4段)相等:
在由于宏扩展和定义的一元运算符执行的所有替换之后,所有剩余的标识符(包括与关键字词法相同的标识符)被替换为pp-number 0,然后每个预处理标记被转换为标记.
这意味着你的比较#if 0==0,这是相同的#if 1.
要解决此问题,您需要定义两者VGA并NVGA具有不同的值:
#define VGA 1
#define NVGA 2
Run Code Online (Sandbox Code Playgroud)