1

我有一个 double 类型的 bool,所以已添加到标题中:

typedef double bool;
extern bool true;
extern bool false;

和:

bool true = 1.0;
bool false = 0.0;

在相应的 C 文件中。

但是,我现在有多个 true 的错误定义,false 的定义相同,指向 C 文件中第一个函数的第一行。显示“先前声明在这里”的错误指向同一行......它始终指向它的文件中首先放置哪个函数没有任何区别。

我的头文件,虽然包含在一个通用头文件中,但确实有包含保护,所以我希望那里不应该有多个 true 和 false 声明。

我已经使用 vars tTrue 和 tFalse 将 typedef 更改为 tBool,这解决了问题,但我不明白为什么它首先会发生?由于代码中仍然有一些使用 true 和 false 的 bool 类型,因此编译器似乎已经将 true 和 false 定义为 ints ......虽然我不认为 C 这样做了

我使用的是使用 mingw 的 dev-c++ 4.9.9.2 IDE,但我不确定 mingw 是哪个版本。

有谁知道为什么会这样?

4

1 回答 1

3

在我看来,您的参数根本不是布尔值。您有一个浮点参数,具有离散数字 0.0 和 1.0 的特殊情况。创建两个double常量而不是一个类型。

C99 增加了类型_Bool bool true false的定义。尝试在标题中插入以下内容:

#if __bool_true_false_are_defined
# error "stdbool.h has been included"
#endif
#ifdef bool
# error "bool is already DEFINED"
#endif
#ifdef true
# error "true is already DEFINED"
#endif
#ifdef false
# error "false is already DEFINED"
#endif

如果其中任何一个着火了,那么你在某处包含了stdbool.h 。您应该能够使用#undef这三个宏,然后安全地设置您的类型。当然,如果其他人期望bool是一个小的整数值并且有更多的风格问题你可以动摇,这可能会破坏。

ISO/IEC 9899:1999 确实对许多团体在添加到标准之前已经定义了自己的布尔类型这一事实做出了让步。这是将 , 和 定义booltruefalse而不是新关键字的基本原理。但是,明确包含以下警告:

7.26.7 布尔类型和值<stdbool.h>

取消定义然后可能重新定义宏的能力bool, true, 和false是一个过时的功能。

于 2012-07-23T12:18:43.190 回答