我已经使用 boolean 值编写了大量代码,并且没有问题地编译和构建。然后编译器甚至编辑器都不再识别“bool”。我所做的修复是“#include <stdbool.h>
”以识别 boolean 值。
但我想知道可能导致此问题的原因是什么?
最佳答案
在 C11 中,bool
类型仅在包含标准头文件 stdbool.h 时才定义。否则,该类型必须被称为 _Bool
。这是标准的早期修订版中完全没有 boolean 类型的结果,并且在该标准的演变过程中注重向后兼容性。
在 C++ 中,bool
类型可以在不包含任何 header 的情况下使用,就像 int
一样。
你的问题是关于 GCC,而不是关于 C 标准,但是如果你不使用命令行选项,比如 -std=c11 -pedantic
使其成为符合标准的编译器,在类型 bool
的情况下,它遵循 C 标准并放弃定义它。
很可能您之前将代码编译为 C++,现在将其编译为 C。另一种可能是您包含了一个包含 stdbool.h 的应用程序 header ,或者它提供了自己的 bool< 定义
,并且您不再包含此 header 。
(甚至可以在理论上想象,有问题的头文件是一个系统头文件,它之前包含 stdbool.h,并且在您升级编译平台时停止了。原则上,无法保证哪个系统头文件可能包含其他系统头文件。但在实践中,由于 stdbool.h 的唯一目的是保持与不包含它的旧代码的兼容性,因此 stdbool.h 永远不会被其他系统头文件包含。)
关于linux - 什么会导致 gcc 不再识别 "bool"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54066676/