【问题标题】:_Bool data type of C99_C99的Bool数据类型
【发布时间】:2014-07-07 03:57:47
【问题描述】:

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

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

【问题讨论】:

  • _Bool 是 C99 中的一个新类型。它是类型安全的(也就是说,C 可以称为“类型安全”),而不是“另一种数据类型的扩展”(不管这意味着什么)
  • -1:C99 没有将 _Bool 定义为另一种数据类型的“扩展”(????)。
  • 我以为是宏。
  • 不,它不是宏。这是一个关键字。参见 C99 标准 6.7.2。您正在考虑标题stdbool.h,其中bool 被定义为扩展为_Bool 的宏。
  • 又错了:_Bool 不是宏。关联的宏是bool。`

标签: c boolean c99


【解决方案1】:

_Bool 是一个单独的整数类型,符合 C 标准。 _Bool 是 C 语言的关键字

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

_Bool 是无符号整数类型。

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

还有一点应该提到

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

【讨论】:

  • 显然我的问题的前提是错误的,因为我认为它是一个宏。谢谢。
【解决方案2】:

_Bool 类型是标准 C99 中出现的一种新类型。
它是一个无符号整数类型。
它的值范围必须能够保持值 0 和 1。
_Bool 的值范围包含在任何其他无符号整数类型的值范围内。

使用关键字_Bool 代替bool,因为标准原理假设在现有实践中(1999 年之前)存在标识符bool 的几种不同用法(作为宏或typedef )。

标准头 <stdbool.h> 将宏 bool 定义为精确的 _Bool
此外,(宏)常量truefalse 分别定义为1 和0。

虽然意图是使用bool这个词,但程序员可以选择使用或不使用标准类型_Bool,或者给出他自己对bool的定义。

【讨论】:

  • C 标准在哪里指定_Bool 类型是无符号的?
  • @2501: 6.2.5p.6: 与标准有符号整数类型对应的_Bool类型和无符号整数类型是标准无符号整数类型。
  • 那是我的观点。 _Bool 不是无符号类型。它是与无符号整数类型不同的类型。 _Bool 是一个标准的无符号整数类型。
  • @2501:如果术语standard unsigned integer type 不被视为unsigned integer types 类的子集,则可能会有一定程度的混淆。我认为其意图是将_Bool 视为unsigned integer type,也就是standard。另一方面,给定一个standard signed integer type,就会有一个对应的standard unsigned integer type(例如shortunsigned short 这对夫妇)。但显然_Bool不是通过这种方式获得的。它本身就是一个额外的standard unsigned integer type
  • 谢谢。我错过了最后的报价。我想那么标准是使用相同的名称来定义不同的东西。呃……
【解决方案3】:

C99 定义了一个新类型_Bool

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

#define bool _Bool

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 2020-08-23
    • 2021-04-07
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多