当在C代码中使用<stdbool.h>时,它会做什么?
我在维基百科上搜索,但没有得到我的语言的答案,我希望有人能向我解释它的意思。
发布于 2022-11-26 14:17:49
当C标准委员会最终在1999年在C语言(C99)中添加了对布尔类型的支持时,他们不希望在语言语义中创建不兼容的更改,因此他们没有使bool、true和false新关键字在已经为类型或变量使用这些标识符的程序中造成错误,它们只为布尔类型添加了_Bool关键字,而布尔类型已经是一个保留标识符。
然而,为了使这些单词可用于具有标准语义的新程序,他们还添加了一个新的标准头文件<stdbool.h>,其中包括该规范:
<stdbool.h>
7.18布尔类型和值
1头<stdbool.h>定义了四个宏。
2.宏观
布尔值
扩展到_Bool。
3其余三个宏适合用于#if预处理指令。他们是
真的
它扩展为整数常量((_Bool)+1u),
错误
它扩展为整数常量((_Bool)+0u),以及
__bool_true_false_are_defined
它扩展为整数常量1。
4尽管有7.1.3的规定,程序可能会取消定义,然后重新定义宏bool、true和false。
我想要在程序中使用布尔变量,包括<stdbool.h>头文件,用bool类型声明它们,并使用true和false作为常量值。
注意,宏这个短语适合在#if预处理指令中使用:true被定义为((_Bool)+1u),而不是((_Bool)1u),因此#if true扩展到#if ((_Bool)+1u),最终扩展到#if ((0)+1u),从而定义了要编译的源代码块,而#if ((0)1u)则会导致预处理错误。
发布于 2022-11-26 13:40:14
我已经浏览过上面链接的维基百科页面,上面说这个头文件是1999年引入C的。
我认为当时我们可能无法使用bool或真假关键字,因为我们现在能够使用。
可能是在那个时候使用它们,我们必须包括那个头文件。
https://stackoverflow.com/questions/74582472
复制相似问题