无法重新定义typedef

时间:2012-10-01 12:45:21

标签: c enums embedded typedef multiple-definition-error

我有bool typedef的代码

typedef enum bool {
    false,
    true,
} bool;

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

但是,如果我在最终的父头文件中定义它,那么使用" bool的较小的头文件定义错误已经在当前范围中声明了#34;

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

TA

2 个答案:

答案 0 :(得分:2)

首先,如果你正在使用C99编译器或更高版本,那么stdbool.h中已经定义了一个标准的布尔类型。

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

直接的解决方案是使用包含守护程序包围你的typedef:

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

这将使类型不再被声明一次。但是,正如您所发现的那样,将相同的类型定义放在两个不同的标题中是一个胃灼热的方法。最好将定义放在自己的头文件中(如上所示包含保护),然后在必要时包含该文件。

答案 1 :(得分:1)

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

或者,您可以执行类似

的操作
#ifndef BOOL_DEFINED
#define BOOL_DEFINED
typedef enum bool {
    false,
    true,
} bool;
#endif
两个标题中都有