为什么gcc支持std = gnu89的布尔类型?

时间:2018-08-27 04:17:16

标签: c gcc c99

为什么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,我们也可以使用布尔类型吗? 如果是这样,原因是什么?

1 个答案:

答案 0 :(得分:2)

在线C参考states that

  

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

进一步,来自这个GNU reference

  

您还可以使用-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是其中一项功能