Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的_Bool和Bool类型之间的区别?_C_Types_Boolean - Fatal编程技术网

C中的_Bool和Bool类型之间的区别?

C中的_Bool和Bool类型之间的区别?,c,types,boolean,C,Types,Boolean,有人能解释一下C中的\u Bool和Bool数据类型之间的区别吗 例如: _Bool x = 1; bool y = true; printf("%d", x); printf("%d", y); 没有区别 bool是一个宏,可在stdbool.h中扩展为\u bool 而true是一个宏,在stdbool.h中扩展为1。这些数据类型是在C99中添加的。由于C99之前没有保留bool,因此他们使用\u bool关键字(保留) bool是\

有人能解释一下C中的
\u Bool
Bool
数据类型之间的区别吗

例如:

 _Bool x = 1;
  bool y = true;

  printf("%d", x);
  printf("%d", y);

没有区别

bool
是一个宏,可在
stdbool.h
中扩展为
\u bool


true
是一个宏,在
stdbool.h

中扩展为1。这些数据类型是在C99中添加的。由于C99之前没有保留
bool
,因此他们使用
\u bool
关键字(保留)


bool
\u bool
的别名,如果包含
stdbool.h
。基本上,包含
stdbool.h
头表示您的代码在标识符
bool
被“保留”的情况下是正常的,即您的代码不会将其用于自己的目的(类似于标识符
true
false
)。

bool
也必须是typedef,C没有这种类型。类似于_complexvs Complex。长期的意图似乎是,该标准最终将被修订,使bool成为一个关键字。这是第1步,您可以使用它来获取bool宏,但仍然允许您为自己的恶意目的取消定义或重新定义它。第二步是拒绝取消定义或重新定义布尔,以阻止此类恶作剧。第三步是使bool成为一个与_bool和mark _bool完全相同的关键字。在这条漫长的道路的尽头(比如说,十年或二十年后),标准C代码将有一个布尔类型,新的程序员不会知道它曾经缺少过布尔类型。我不理解为什么这需要二十年,因为这是一个非常明显的改进。不喜欢这种更改的代码仍然可以使用当前的编译器版本进行编译。我不认为C标准会被修改成boola关键字。考虑字符串文字的类型仍然是“代码> char */CODE >,并且您仍然可以使用未原型的函数声明。@ JL2210是的,但是每个不是语言的律师都会想到默认时接受的语言(即C11+默认的任何一组扩展都是默认的),因此说“您不能使用非类型化函数声明,因为在C90之后”只会让人们更加困惑。@JL2210我这样说:“非类型化函数声明是原始1989 C标准的过时功能。它们已从标准的后期修订版中删除,但出于向后兼容性的考虑,现代编译器仍然接受它们。不要在新代码中使用它们。”