使用以下代码,我总是得到" VGA"作为输出,当我打算得到" NOT 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
答案 0 :(得分:5)
问题是,VGA
和NVGA
在哪里定义?
如果没有定义,根据C标准,它们将等于0
(N1570 - 6.10.1条件包含 - 第4段):
由于宏扩展和定义的一元所有替换后 运算符已执行,所有剩余的标识符(包括那些词法 用关键字替换为pp-number 0,然后进行每次预处理 令牌被转换为令牌。
这意味着您的比较结果为#if 0==0
,与#if 1
相同。
要解决此问题,您需要将VGA
和NVGA
定义为具有不同的值:
#define VGA 1
#define NVGA 2
答案 1 :(得分:1)
有两种可能性,我无法分辨出哪种可能性。最可能的是,因为NVGA
和VGA
都不是#define
d宏,它们在#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
时遇到错误,那么您的问题就是第二个问题。
答案 2 :(得分:0)
因为NVGA本身尚未定义。相反,试试这个:
#define NVGA 0
#define VGA 1
#define ADAPTER VGA
#if ADAPTER==VGA
/* insert VGA code here*/
#else
/* insert NVGA code here*/
#endif