C中的_Bool和Bool类型之间的区别?
有人能解释一下C中的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是\
\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标准会被修改成bool
a关键字。考虑字符串文字的类型仍然是“代码> char */CODE >,并且您仍然可以使用未原型的函数声明。@ JL2210是的,但是每个不是语言的律师都会想到默认时接受的语言(即C11+默认的任何一组扩展都是默认的),因此说“您不能使用非类型化函数声明,因为在C90之后”只会让人们更加困惑。@JL2210我这样说:“非类型化函数声明是原始1989 C标准的过时功能。它们已从标准的后期修订版中删除,但出于向后兼容性的考虑,现代编译器仍然接受它们。不要在新代码中使用它们。”