什么是C / C ++中的bool?

What is bool in C/C++? A keyword or a macro?

我提到了这个问题,其中一些答案表明bool是一个整型(ides也把它当作关键字)。

但是,没有任何答案表明cplusplus中提供的信息,cplusplus表示bool是通过添加的宏(在这种情况下,编译器可能在编译时隐式添加此头文件以允许bool)。这是的G++版本。

那么,bool到底是什么?整型关键字还是宏?


在C语言中,bool是一个宏。

C中没有名为bool的内置类型或关键字,因此典型的实现分别使用标准库来实现#definetruefalse10if语句的规则是用"零"和"非零"表达式定义的,因此依赖于truefalse的扩展宏定义:

[C99: 6.8.4.1/2]: In both forms, the first substatement is executed if the expression compares unequal to 0. In the else form, the second substatement is executed if the expression compares equal to 0. If the first substatement is reached via a label, the second substatement is not executed.

为了方便起见,c99增加了内置的中间类型_Bool,这种语言的实现通常是#definebool_Bool。此类型的定义如下:

[C99: 6.2.5/2]: An object declared as type _Bool is large enough to store the values 0 and 1.

这允许与C++程序具有更大的兼容性,这可能包括使用EDCOX1×0×类型的函数声明;然而,实际上,EDCOX1(21)可能已经足够了。

在C++中,EDCOX1×0是一个内置类型和一个关键字。

你所提供的链接并没有说EDCOX1 0是C++中的宏。它说:

The purpose in C of this header is to add a bool type and the true and false values as macro definitions.

In C++, which supports those directly, the header simply contains a macro that can be used to check if the type is supported.

这是正确的。

语义上(即,在代码的"含义")中,EDCOX1(24)定义为C++中的一个整体类型EDCOX1×0。

在词汇上(也就是说,在代码中的"外观"),[C++11: 2.12/1]将其作为关键字列出。事实上,作为整型名称一部分的所有令牌也是关键字,包括(但不限于):

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

然而,它永远不是C++中的宏。取而代之的是,你可以得到一个宏EDCOX1(33),你可以在多语言代码中使用它来切换bool,这取决于你是在C还是C++中工作,我不确定我能想出一个有用的例子,请注意。


在c bool中,是从stdbool.h扩展到c布尔类型的_Bool的宏。


So what exactly the bool is? A an integral type keyword or a macro?

在C++中,它被称为布尔文字,它是内置类型。

2.2.7

类型bool、char、char16_t、char32_t、wchar_t和有符号和无符号整数类型统称为整型。

2.2.6

布尔字面常数

1
2
3
boolean-literal:
false
true

布尔文本是关键字false和true。这些文本是prvalues,类型为bool。

3.3.1.1.6

Values of type bool are either true or false. [ Note: There are no signed, unsigned, short, or long
bool types or values. — end note ] Values of type bool participate in integral promotions (4.5).


在c _Bool中是一个类型,bool中,truefalsestdbool.h中定义的宏。

ISO C11标准状态(第6.2.5节类型)

An object declared as type _Bool is large enough to store the values 0 and 1.

stdbool.h定义了4个宏。

  • bool,扩展到_Bool
  • true扩大到1
  • false扩大到0
  • __bool_true_false_are_defined扩大到1

  • 在C中,没有像布尔变量这样的概念,是的,像Java、C语言等高级语言为我们提供了声明布尔变量的工具,我们用它来标记目的,以将其设置为真或假。

    但是你可以用积分来实现这个,就像我们在C中做的那样。

    1
    2
    3
    4
    5
    6
    7
    8
    if(1)
    {
       // Because C treats 1 and any other integer as true
    }
    if(0)
    {
       // This time our if condition will result in false
    }


    在C++ EDCOX1中,0是一个内置的数据类型。在C中不是,所以如果您在C中使用bool,那么它已经实现为typedef或#define,并且truefalse必须实现为#define,或者可能是常量。