gpt4 book ai didi

C 预处理器错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:54 26 4
gpt4 key购买 nike

我希望代码输出 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 文件不包含任何内容,它们没有实际用途。

最佳答案

== 的预处理器比较适用于整数值,而不是字符串或宏名称。您应该能够通过首先用整数值定义宏 SUSEWIN 来解决这个问题,例如,

#define SUSE 1
#define WIN 2
#define SYS SUSE

在此之后,SYSSUSE 都解析为整数 1,并且应该可以进行比较。

但是,我建议使用更传统的方法为系统定义不同的宏,例如:

#define SYS_SUSE
//#define SYS_WIN

#if defined(SYS_SUSE)
#define HDR "suse.sys"
#elif defined(SYS_WIN)
#define HDR "win.sys"
#else
#define HDR "default.sys"
#endif

这种方法的优点是能够更方便地在命令行、makefile 等上指定系统,而不依赖于在每个上下文中定义的数字常量:

cc -DSYS_WIN -c foo.c

关于C 预处理器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com