关于SO的this 问题的答案指明在C99中引入了_Bool
(具体而言
BobbyShaftoe的回答)。
但是下面的代码与gcc -std=c90 -pedantic test.c
和gcc -std=c89 -pedantic test.c
完全编译,产生输出1
(我的gcc版本是4.7.1)
#include<stdio.h>
#include<stdlib.h>
int main(){
_Bool a = 0;
printf("%u\n",sizeof(a) );
return 0;
}
那么_Bool
引入了哪个版本?
答案 0 :(得分:2)
正如@ 0xC0000022L指出的那样,您需要区分标准实施和实际实施。有趣的是,GCC(以及Clang)如何对待_Bool
仍有一些不一致之处。 C99还引入了_Complex
类型,其中有诊断消息:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%lu\n", (unsigned long) (sizeof(_Complex)));
return 0;
}
结果(GCC 4.4.7):
$ gcc -ansi -pedantic-errors check.c
check.c: In function ‘main’:
check.c:5: error: ISO C90 does not support complex types
check.c:5: error: ISO C does not support plain ‘complex’ meaning ‘double complex’
您可以检查源代码,然后您会发现确实_Complex
类型是针对标准版本检查的,而_Bool
则不是:
gcc/po/gcc.pot:19940
#: c-decl.c:7366
#, gcc-internal-format
msgid "ISO C90 does not support complex types"
msgstr ""
gcc/c-decl.c:7380
case RID_COMPLEX:
dupe = specs->complex_p;
if (!flag_isoc99 && !in_system_header)
pedwarn (input_location, OPT_pedantic, "ISO C90 does not support complex types");
我不会把它称为错误,而是由开发人员做出的决定。