Typedef在标题中无效

时间:2013-06-11 17:13:25

标签: c header typedef

我有一个C项目,其结构如下:

Project
- fileA.h
- fileA.c
+ subdirB
  - fileD.h

fileD.h中有一个bool的typedef枚举:

typedef enum bool {
    false = 0,  /**< false (0) */
    true        /**< true (1) */
} bool;

在fileA.c中有几个函数使用bool作为参数,因此包含了fileD.h:

#include "subdirB/fileD.h" // header with bool typedef
#include "fileA.h"         // own header with foo declaration
...
int foo (bool bar) {
 ...
 return 0;
}
...

这些函数将变为全局函数,因此它们的声明将添加到头文件A.h:

int foo (bool bar);

但最后一点却给我一个错误,“标识符bool未定义”......我不明白为什么会出现这种情况?

2 个答案:

答案 0 :(得分:4)

您是否在fileD.h中加入了fileA.h?为了声明一个带有bool的函数,编译器需要知道bool是什么。

答案 1 :(得分:1)

如前所述,fileA.h需要了解bool中定义的fileD.h类型,以便foo()的函数原型有效。

但请注意,由于您的bool不是内置类型,而是enum,因此对于所有非零值,没有隐式转换为true。所以不要指望foo()中的代码如下:

if (bar == true) {
    //...
}

在一般情况下工作。您可以使用foo()的宏替换来缓解此问题:

#define foo(x) foo(!!(x))

如果您有许多功能需要bool,这将变得乏味。但!!技巧本身可以为您将非零值转换为1