什么是C/C++中的bool?关键字还是宏?

iam*_*ind 7 c c++ boolean keyword

我提到了这个问题,其中一些答案表明这bool是一个整体类型(IDE也将其视为关键字).

但是,没有一个答案表明cplusplus中提供的信息,它表示这bool是一个通过添加的宏<cstdbool>(在这种情况下,编译器可能在编译时允许隐式添加此头bool).这是g ++版本的<stdbool.h>.

究竟bool是什么呢?一个整数类型的关键字或宏?

Lig*_*ica 16

在C中,bool是一个宏.

有没有内置类型或关键字通过的名称bool在C,所以典型的实现方式使用标准库到#define truefalse10分别.诸如if语句的规则是用"零"和"非零"表达式定义的true,因此依赖于和的扩展宏定义false:

[C99: 6.8.4.1/2]: 在两种形式中,如果表达式比较不等于0,则执行第一个子语句.在else表单中,如果表达式比较等于0,则执行第二个子语句.如果通过标签到达第一个子语句,则第二个子语句不是执行.

为方便起见,C99添加了内置的中间类型_Bool,并且通常#define bool使用这种语言的实现_Bool.因此定义了这种类型:

[C99: 6.2.5/2]:声明为type的对象_Bool足以存储值0和1.

这允许与C++程序更好的兼容性,其中可能包括使用该bool类型的函数声明; 但是,真的#define _Bool int可能已经足够了.


在C++中,bool既是内置类型又是关键字.

您提供的链接并不是说boolC++中的宏.它说:

此标头的C的目的是添加bool类型以及true和false值作为宏定义.

在直接支持这些内容的C++中,标头只包含一个宏,可用于检查是否支持该类型.

这是正确的.

在语义上(也就是代码的"含义"),在C++中[C++11: 3.9.1/2]定义bool为一个整数类型.

词法上(即代码中的"外观")[C++11: 2.12/1]将其列为关键字.实际上,作为整数类型名称一部分的所有标记也是关键字,包括(但不限于):

  • int
  • unsigned
  • long
  • bool
  • short
  • signed

但是,它从来就不是 C++中的宏.相反,您可以获得一个宏__bool_true_false_are_defined,您可以在多语言代码中使用该宏来bool根据您是使用C还是C++ 来切换处理; 我不确定我能想到一个有用的例子,请注意.


oua*_*uah 8

在C中bool是一个宏,从中stdbool.h扩展到_BoolC布尔类型.