linux - 什么会导致 gcc 不再识别 "bool"?

标签 linux gcc boolean

我已经使用 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/

相关文章:

python - 多列上的 Pandas 数据框 boolean 掩码

java - 这段代码的逻辑如何抽象?

c - 程序调用延迟 - C 和 Linux

linux - 检查linux脚本中文件是否存在

gcc - 是否可以让GCC编译带有BOM的UTF-8源文件?

c - 结构末尾大小为 0 的数组

java - 随机返回真或假

linux - 无法在 bash 中增加变量

linux - 为什么 syslog.h 没有标准的 GNU 头文件

c++ - IPC 通过与 atomic_t 共享内存;它对 x86 有好处吗?