无法重新定义枚举 typedef
Posted
技术标签:
【中文标题】无法重新定义枚举 typedef【英文标题】:cant re-def enum type def 【发布时间】:2012-10-01 12:45:20 【问题描述】:我有 bool typedef 的代码
typedef enum bool
false,
true,
bool;
在两个头文件中,如果最终父头文件中没有包含它,则子 C 文件当然不能使用 bool 类型,尽管也定义了它的较小头文件的子文件可以。
但是,如果我在最终的父头文件中定义它,那么较小的头文件定义错误“布尔已在当前范围内声明”
我需要一个针对较小标头的解决方案,它可能包含在可能已经或可能尚未定义 bool 的项目中......最好的方法是什么??
塔
【问题讨论】:
请注意,在 C99 (#include <stdbool.h>
) 中添加了布尔类型。
不幸的是,我在这种环境中没有可用的 stdbool.h ... :(
【参考方案1】:
首先,如果您使用的是 C99 或更高版本的编译器,stdbool.h
中已经定义了标准布尔类型。
其次,您通常可以避免直接针对 true
和 false
值进行测试,多年来我发现这实际上会导致代码更易于阅读且不易出错(这只是不过个人意见——YMMV)。
直接的解决方案是在你的 typedef 周围加上一个包含保护:
#ifndef BOOL_DEFINED
#define BOOL_DEFINED
typedef enum bool
false,
true
bool;
#endif
这将防止类型被多次声明。但是,正如您所发现的,将相同的类型定义放在两个不同的标头中会导致胃灼热。最好将定义放在它自己的头文件中(使用如上所示的包含保护),然后在必要时包含该文件。
【讨论】:
【参考方案2】:我会将这个和任何其他共享定义分解到一个 types.h 标头中,该标头包含在您的每个其他标头中。
或者,你可以做类似的事情
#ifndef BOOL_DEFINED
#define BOOL_DEFINED
typedef enum bool
false,
true,
bool;
#endif
在两个标题中。
【讨论】:
以上是关于无法重新定义枚举 typedef的主要内容,如果未能解决你的问题,请参考以下文章