【问题标题】:cant re-def enum type def无法重新定义枚举 typedef
【发布时间】:2012-10-01 12:45:20
【问题描述】:

我有 bool typedef 的代码

typedef enum bool {
    false,
    true,
} bool;

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

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

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

【问题讨论】:

  • 请注意,在 C99 (#include <stdbool.h>) 中添加了布尔类型。
  • 不幸的是,我在这种环境中没有可用的 stdbool.h ... :(

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


【解决方案1】:

首先,如果您使用的是 C99 或更高版本的编译器,stdbool.h 中已经定义了标准布尔类型。

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

    在两个标题中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多