我已经使用布尔编写了大量代码,并且编译和构建都没有问题。然后,编译器甚至编辑器不再识别“布尔”。我所做的一个修复是“ #include <stdbool.h>
”来识别布尔值。
但是我想知道什么可能导致此问题?
答案 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永远不会被另一个系统头文件包含。)