c - 为什么 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
吗?如果是这样,原因是什么?
解决方案
在线 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
是这些功能之一。
推荐阅读
- python - Get value from a line intersecting 0.0 level
- node.js - 错误离子服务确实弹出未处理的异常:NGCC失败
- c# - 如何从格式不同的字符串中提取数字?
- c# - 检查网格中瓷砖的相邻性
- c# - Web 服务器上的 HRESULT 0x80070057 - asp.net
- mysql - 为什么我在使用 AES_DECRYPT 时收到没有更多详细信息的错误?
- python - 使用 nltk 从字典中删除非英语单词
- c# - WPF 绑定问题 - 显示不可见的项目
- c - 为什么即使保证返回,我也会收到警告“控制到达非无效函数的结尾”
- mongodb - Centos 7中的Mongodb启动失败