C99的_Bool数据类型

6

C语言的C99标准将_Bool数据类型定义为另一种数据类型的宏(因为该语言无法处理类型安全的布尔值)。

_Boolunsigned charunsigned int或其他某种数据类型的宏吗?


8
_Bool 是 C99 中的一种新类型。它是类型安全的(就 C 语言而言,可以称之为“类型安全”),不是另一种数据类型的“扩展”(无论那意味着什么)。 - M.M
-1:C99不将_Bool定义为另一种数据类型的“扩展”。 - pablo1977
我以为那是一个宏。 - HelloWorld
11
不,它不是宏。它是一个关键字。请参阅C99标准6.7.2。你可能在想头文件stdbool.h中,其中bool被定义为一个将展开为_Bool的宏。 - ooga
6
再次错误:_Bool 不是宏。相关的宏是 bool - pablo1977
这个回答解决了你的问题吗?C99布尔数据类型? - undefined
3个回答

17

_Bool是C标准中的一个独立整数类型。 _Bool是C语言的关键字。

2. 声明为 _Bool 类型的对象足够大,可以存储值 0 和 1。

_Bool是无符号整数类型。

_Bool 类型和与标准有符号整数类型相对应的无符号整数类型是标准无符号整数类型。

还应该提到:

— _Bool 的等级应低于所有其他标准整数类型的等级。


3
显然,我的问题前提是错误的,因为我以为它是一个宏。谢谢。 - HelloWorld

9
_Bool类型是在标准C99中出现的新类型。
它是一种无符号整数类型。
它能够容纳的值的范围必须为0和1。
_Bool的值范围包含在任何其他无符号整数类型的值范围内。
关键字_Bool被用来代替bool,因为标准理由认为在1999年之前的现有实践中存在多种不同的bool标识符的用法(作为宏或typedef)。
标准头文件<stdbool.h>将宏bool定义为正好意味着_Bool
此外,(宏)常量truefalse分别定义为1和0。
虽然意图是使用单词bool,但程序员可以选择使用或不使用标准类型_Bool或定义自己的bool

1
@2501: 6.2.5p.6:类型_Bool和与标准有符号整数类型相对应的无符号整数类型是标准无符号整数类型。 - pablo1977
那就是我的观点。_Bool不是无符号类型。它是与无符号整数类型分开的一种类型。然而,_Bool是一个标准的无符号整数类型。 - 2501
如果不将“标准无符号整数类型”视为“无符号整数类型”的子集,则可能会产生某种程度的混淆。我认为意图是将“_Bool”视为“标准无符号整数类型”,同时也是“标准”的。另一方面,对于给定的“标准有符号整数类型”,存在相应的“标准无符号整数类型”(例如“short”和“unsigned short”)。但显然,_Bool并非以这种方式获得。它是一种独立的“标准无符号整数类型”。 - pablo1977
1
谢谢。我错过了那个最后的引号。我猜标准是使用相同的名称来定义不同的东西。唉... - 2501
2
@2501 不,它说的是“_Bool类型和与标准有符号整数类型对应的无符号整数类型是标准的无符号整数类型”。因此,“正常”的无符号整数类型(那些具有相应有符号变体的类型)很遗憾没有名称(至少标准没有给出)。或者可以认为它们的名称是“与标准有符号整数类型对应的无符号整数类型”;这是一个很长的名称,但足够具体。 - alx - recommends codidact
显示剩余3条评论

5

C99定义了一种新类型_Bool

它还定义了一个名为stdbool.h的新头文件,其中包含以下行:

#define bool _Bool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接