C中_Bool和bool类型的区别?
Posted
技术标签:
【中文标题】C中_Bool和bool类型的区别?【英文标题】:Difference between _Bool and bool types in C? 【发布时间】:2012-02-02 04:56:28 【问题描述】:谁能解释一下 C 中的 _Bool
和 bool
数据类型有什么区别?
例如:
_Bool x = 1;
bool y = true;
printf("%d", x);
printf("%d", y);
【问题讨论】:
bool
也必须是 typedef,C 没有那种类型。
类似于_Complex vs complex。
【参考方案1】:
这些数据类型是在 C99 中添加的。由于 bool
在 C99 之前没有保留,因此他们使用 _Bool
关键字(已保留)。
bool
是_Bool
的别名,如果您包含stdbool.h
。基本上,包含stdbool.h
标头表明您的代码可以使用标识符bool
被“保留”,即您的代码不会将其用于自己的目的(类似于标识符true
和@ 987654329@)。
【讨论】:
长期的意图似乎是该标准最终将被修订以使 bool 成为关键字。这是第 1 步,您可以在其中使用bool
成为关键字。考虑到字符串字面量的类型仍然是char *
,你仍然可以使用非原型函数声明。
@JL2210 是的,但是每个不是语言律师的人在想到 C11 时都会想到默认接受的语言(即 C11 + 默认情况下激活的任何扩展集),因此说“你不能使用非原型函数声明,因为在 C90 之后”只会让人们比现在更加困惑。
@JL2210 我会这样说:“非原型函数声明是 1989 年原始 C 标准的过时特性。它们已从标准的后续修订版中删除,但仍为现代编译器所接受为了向后兼容。不要在新代码中使用它们。"【参考方案2】:
没有区别。
bool
是在stdbool.h
中扩展为_Bool
的宏。
而true
是在stdbool.h
中展开为1 的宏
【讨论】:
以上是关于C中_Bool和bool类型的区别?的主要内容,如果未能解决你的问题,请参考以下文章