【发布时间】:2014-07-09 13:40:07
【问题描述】:
我希望代码输出 suse.sys,但它实际上打印了 win.sys。为什么会这样?
#define SYS SUSE
#if SYS == WIN
#define HDR "win.sys"
#elif SYS == SUSE
#define HDR "suse.sys"
#else
#define HDR "default.sys"
#endif
#include HDR
#include <stdio.h>
int main()
{
char *name = HDR;
printf("%s\n", name);
return 0;
}
这类似于 C 编程语言第二版中的示例。 .sys 文件不包含任何内容,它们没有实际用途。
【问题讨论】:
-
是否定义了
HDR和SUSE? -
第一个
#if被替换为#if SUSE == WIN,SUSE和WIN(我假设)没有定义,所以它们默认为0(因为它们在算术表达式中使用) ,所以它被评估为#if 0 == 0,也就是1,所以HDR被定义为"suse.sys"。您似乎想通过预处理器比较字符串,这是不可能的。 -
-
@CSSStudent,正如 mafso 指出的那样:无法比较字符串
-
所以你可以再添加两个定义:
#define WIN 0和#define SUSE 1或类似的东西
标签: c include c-preprocessor kernighan-and-ritchie