0

我有 bool typedef 的代码

typedef enum bool {
    false,
    true,
} bool;

在两个头文件中,如果最终父头文件中不包含它,则子 C 文件当然不能使用 bool 类型,尽管也定义了它的较小头文件的子文件可以。

但是,如果我在最终的父头文件中定义它,那么较小的头文件定义错误“布尔已在当前范围内声明”

我需要一个较小标题的解决方案,它可能包含在可能已经或可能尚未定义 bool 的项目中......最好的方法是什么?

4

2 回答 2

2

首先,如果您使用的是 C99 或更高版本的编译器,那么stdbool.h.

其次,您通常可以避免直接针对truefalse值进行测试,多年来我发现这实际上导致代码更易于阅读且不易出错(不过,这只是个人意见——YMMV)。

直接的解决方案是用包含保护包围你的 typedef:

#ifndef BOOL_DEFINED
#define BOOL_DEFINED
typedef enum bool {
  false,
  true
} bool;
#endif

这将防止该类型被多次声明。但是,正如您所发现的,将相同的类型定义放在两个不同的标头中会导致胃灼热。最好将定义放在它自己的头文件中(使用如上所示的包含保护),然后在必要时包含该文件。

于 2012-10-01T13:03:14.807 回答
1

我会将这个和任何其他共享定义分解到一个 types.h 标头中,该标头包含在您的每个其他标头中。

或者,你可以做类似的事情

#ifndef BOOL_DEFINED
#define BOOL_DEFINED
typedef enum bool {
    false,
    true,
} bool;
#endif

在两个标题中。

于 2012-10-01T13:00:33.410 回答