首页 > 解决方案 > 为什么 gcc 支持 std=gnu89 的布尔类型?

问题描述

为什么 gcc 支持 std=gnu89 的布尔类型?起初,我认为 gcc 不支持这一点。

为了测试这一点,我编写了一个如下所示的 c 文件。

#include <stdio.h>
#include <stdbool.h>
int main(int argc, const char *argv[]) {
    bool x;
    printf("size of bool:%lu\n",sizeof(x));
    return 0;
}

我跑了 gcc:

$ gcc -std=gnu89 my_ex.c

但它成功了。

即使使用 ,我们也可以使用布尔类型-std=gnu89吗?如果是这样,原因是什么?

标签: cgccc99

解决方案


在线 C 参考指出

从 C99 开始,C 编程语言支持具有内置类型 _Bool 的布尔算术(请参阅 _Bool)。当包含标头时,布尔类型也可以作为 bool 访问

此外,从这个 GNU参考

您还可以使用 -std=gnu89(对于带有 GNU 扩展的 C89)或 -std=gnu99(对于带有 GNU 扩展的 C99)显式选择 C ​​语言的扩展版本。如果没有给出 C 语言方言选项,则默认值为 -std=gnu89;当 C99 支持完成时,这将在将来的某个版本中更改为 -std=gnu99。作为 C99 标准一部分的某些功能在 C89 模式下被接受为扩展

ISO C 标准定义(在第 4 节中)两类符合要求的实现。符合要求的托管实现支持整个标准,包括所有图书馆设施;一个符合要求的独立实现只需要提供某些库设施:那些在 、 、 和 ; 自 AMD1 以来,还有那些在 ; 在 C99 中,还有 和 中的那些。

因此,您可以从上面突出显示的部分看到,作为 C99 标准一部分的某些功能在 C89 模式下被接受为扩展。并且bool是这些功能之一


推荐阅读