是什么会导致gcc不再识别“布尔”?

时间:2019-01-06 22:57:25

标签: linux gcc boolean

我已经使用布尔编写了大量代码,并且编译和构建都没有问题。然后,编译器甚至编辑器不再识别“布尔”。我所做的一个修复是“ #include <stdbool.h>”来识别布尔值。

但是我想知道什么可能导致此问题?

1 个答案:

答案 0 :(得分:1)

在C11中,仅在包含标准头stdbool.h时定义类型bool。否则,该类型必须称为_Bool。这是由于在该标准的较早版本中完全没有布尔类型,并且在该标准的演进中着重向后兼容的结果。

在C ++中,bool类型可用,不像int那样包含任何标头。

您的问题是关于GCC的,而不是关于C标准的,但是,如果您不使用-std=c11 -pedantic之类的命令行选项使其成为符合标准的编译器,那么GCC确实对C标准有一些模糊的自由,对于bool类型,它遵循C标准,并且放弃定义它。

您以前可能是用C ++编译代码,现在又是C编译。另一种可能性是,您包括一个包含stdbool.h或提供了自己的bool定义的应用程序标头。 ,并且您不再包含此标头。

((甚至可以从理论上想象所讨论的头文件是以前包含stdbool.h的系统头文件,并且在升级编译平台时不再存在。原则上,我们无法保证哪个系统头文件是可能包含其他系统头文件。但是,实际上,由于stdbool.h的唯一目的是保持与不包含它的旧代码的兼容性,因此stdbool.h永远不会被另一个系统头文件包含。)