我提到this question,其中一些答案表明bool
是一个整数类型(IDE也将其视为关键字)。
但是,没有一个答案提示cplusplus中提供的信息,其中bool
是一个通过<cstdbool>
添加的宏(在这种情况下,编译器可能是隐式的在编译时添加此标头以允许bool
)。这是<stdbool.h>
的g ++版本。
那么bool
究竟是什么?一个整数类型的关键字或宏?
答案 0 :(得分:16)
bool
是一个宏。 C中没有bool
名称的内置类型或关键字,因此典型的实现使用标准库#define
true
和false
来{分别为{1}}和1
。诸如0
语句的规则是根据“零”和“非零”表达式定义的,因此依赖于if
和true
的扩展宏定义:< / p>
false
在两种形式中,如果表达式比较不等于0,则执行第一个子语句。在else表单中,如果表达式比较等于0,则执行第二个子语句。如果通过标签,第二个子语句不执行。
为方便起见,C99添加了内置中间类型[C99: 6.8.4.1/2]:
,此语言的实现通常为_Bool
#define
到bool
。因此定义了这种类型:
_Bool
声明为类型[C99: 6.2.5/2]:
的对象足以存储值0和1。
这允许更好地兼容C ++程序,其中可能包括使用_Bool
类型的函数声明;但实际上,bool
可能已经足够了。
#define _Bool int
既是内置类型,也是关键字。您提供的链接并未说明{C}中的bool
是一个宏。它说:
此标题的C目的是添加bool类型以及true和false值作为宏定义。
在直接支持这些内容的C ++中,标题只包含一个宏,可用于检查该类型是否受支持。
这是正确的。
语义(即代码的“含义”),bool
将[C++11: 3.9.1/2]
定义为C ++中的整数类型。
词汇(即代码中的“外观”),bool
将其列为关键字。事实上,作为整数类型名称一部分的所有标记也是关键字,包括(但不限于):
[C++11: 2.12/1]
int
unsigned
long
bool
short
然而,永远不会 C ++中的宏。相反,你会得到一个宏signed
,您可以在多语言代码中使用它来切换__bool_true_false_are_defined
的处理,具体取决于您使用的是C还是C ++;我不确定我能想出一个有用的例子,请注意。
答案 1 :(得分:7)
在C bool
中是来自stdbool.h
的宏,它扩展为_Bool
,这是C布尔类型。
答案 2 :(得分:4)
那么bool到底是什么?一个整数类型的关键字或宏?
在C ++中,它被称为布尔文字,它是类型的构建。
§2.14.7
类型 bool ,char,char16_t,char32_t,wchar_t以及有符号和无符号整数类型统称为整数类型。
§2.14.6
布尔文字
boolean-literal:
false
true
布尔文字是关键字 false 和 true 。这样的文字是prvalues,并且有类型bool。
§3.9.1.6
bool类型的值为true或false。 [注意:没有签名,无符号,短或长 bool类型或值。 - 尾注] bool类型的值参与整体促销(4.5)。
答案 3 :(得分:1)
在C ++中bool
是一种内置数据类型。在C中它不是,所以如果你在C中使用bool
它已经被实现为typedef或#define
,并且true
和false
必须已经实现#define
或者可能是常数。
答案 4 :(得分:1)
在C中没有像布尔变量那样的概念,是Java,C#等高级语言为我们提供了声明布尔变量的工具,我们将其用于标记目的,将其设置为true或false。
但你可以像我们在C
中那样使用积分来实现if(1)
{
// Because C treats 1 and any other integer as true
}
if(0)
{
// This time our if condition will result in false
}
答案 5 :(得分:1)
在C _Bool
中是一种类型bool
,true
和false
是stdbool.h
ISO C11标准状态(在 6.2.5类型部分)
声明为_Bool类型的对象足以存储值0和1。
stdbool.h
定义了4个宏。
bool
扩展为_Bool
true
扩展为1
false
扩展为0
__bool_true_false_are_defined
扩展为1
。