我用布尔语言编写了很多代码,并且编译和构建都没有问题。然后编译器甚至编辑器不再识别“bool”。我做的一个修正是“#include <stdbool.h>
”来识别布尔人。
但我想知道是什么导致了这个问题?
最佳答案
在C11中,仅当包含标准头stdbool.h时才定义类型bool
。否则,该类型必须称为_Bool
。这是由于在标准的早期版本中完全没有布尔类型,并且在所述标准的演进中着重于向后兼容。
在C++中,bool
类型可以不包含任何标题,就像int
。
您的问题是关于GCC,而不是关于C标准,但是如果您不使用命令行选项(如-std=c11 -pedantic
使其成为标准兼容编译器),GCC确实对C标准有一些模糊的自由,对于类型bool
,它遵循C标准并避免定义它。
很可能,您以前编译的代码是C++,现在编译为C。另一种可能性是,您包括一个包含STDBOOL .H的应用程序头,或者提供了自己的定义“cc>”,并且您不再包括这个头。
(在理论上甚至可以想象,所讨论的头是一个系统头,它以前包括stdbool.h,在升级编译平台时停止了)。原则上,不能保证哪个系统头可以包含哪些其他系统头。不过,实际上,由于stdbool.h的唯一目的是保持与不包含它的旧代码的兼容性,因此stdbool.h永远不会被另一个系统头包含。)