枚举中这些#define 的用途是什么?
- 2024-10-18 09:00:00
- admin 原创
- 72
问题描述:
我在 Linux 标头 /usr/include/dirent.h 中找到了此代码:
enum
{
DT_UNKNOWN = 0,
# define DT_UNKNOWN DT_UNKNOWN
DT_FIFO = 1,
# define DT_FIFO DT_FIFO
DT_CHR = 2,
# define DT_CHR DT_CHR
DT_DIR = 4,
# define DT_DIR DT_DIR
DT_BLK = 6,
# define DT_BLK DT_BLK
DT_REG = 8,
# define DT_REG DT_REG
DT_LNK = 10,
# define DT_LNK DT_LNK
DT_SOCK = 12,
# define DT_SOCK DT_SOCK
DT_WHT = 14
# define DT_WHT DT_WHT
};
这个构造是做什么用的? - 为什么要定义具有相同字符串的东西,然后将其编译为 int 值?
解决方案 1:
除了其他非常好的答案之外 - 我会选择它们,主要原因是 - 如果您尝试重新定义,编译器可能会生成警告或错误DT_UNKNOWN
。
解决方案 2:
我的猜测是,其他一些代码可以检查这些枚举值中的一个(或多个)是否已经使用#ifdef 进行了定义。
解决方案 3:
我的(未经证实的)猜测是,这些#define
语句允许条件测试来查看常量是否已被定义。
例如:
#ifdef DT_UNKNOWN
// do something
#endif
解决方案 4:
我认为 Luchian Grigore 的回答是正确的。
没有定义的代码:
#include <stdio.h>
// Defined somewhere in headers
#define DT_UNKNOWN 0
enum
{
DT_UNKNOWN = 0,
DT_FIFO = 1,
};
int main(int argc, char **argv)
{
printf("DT_UNKNOWN is %d
", DT_UNKNOWN);
return 0;
}
从编译器的输出来看,不清楚为什么 enum 中的某些代码行不想构建:
alexander@ubuntu-10:~/tmp$ gcc -Wall ./main.c
./main.c:7: error: expected identifier before numeric constant
添加这样的定义后:
#include <stdio.h>
// Defined somewhere in headers
#define DT_UNKNOWN 0
enum
{
DT_UNKNOWN = 0,
# define DT_UNKNOWN DT_UNKNOWN
DT_FIFO = 1,
# define DT_FIFO DT_FIFO
};
int main(int argc, char **argv)
{
printf("DT_UNKNOWN is %d
", DT_UNKNOWN);
return 0;
}
编译器会告诉我们 DT_UNKNOWN 已被重新定义,以及重新定义的位置:
alexander@ubuntu-10:~/tmp$ gcc -Wall ./main2.c
./main2.c:7: error: expected identifier before numeric constant
./main2.c:8:1: warning: "DT_UNKNOWN" redefined
./main2.c:3:1: warning: this is the location of the previous definition
解决方案 5:
我使用了-E
和-dD
参数(以及-fdump-tree-all
)gcc
来查看预处理器输出,但没有发现任何有用的东西。所以我猜想除了在使用类似这样的调试器进行调试时显示符号名称之外,此代码没有任何功能gdb
。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD