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

2023-11-26

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

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

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


In C, bool是一个宏。

没有名为 的内置类型或关键字bool在 C 中,因此典型的实现使用标准库来#define true and false to 1 and 0分别。诸如以下规则if语句是用“零”和“非零”表达式定义的,因此依赖于扩展的宏定义true and false:

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

为了方便,C99添加了内置的中间类型_Bool,以及该语言的典型实现#define bool to _Bool。该类型的定义如下:

[C99: 6.2.5/2]:声明为类型的对象_Bool足够大以存储值 0 和 1。

这允许与 C++ 程序更好的兼容性,其中可能包括使用bool类型;确实,不过,#define _Bool int可能就足够了。


In C++, bool既是内置类型又是关键字。

您提供的链接并没有这么说bool是C++中的宏。它说:

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

在直接支持这些类型的 C++ 中,标头仅包含一个可用于检查类型是否受支持的宏。

这是正确的。

语义上(也就是说,就代码的“含义”而言),[C++11: 3.9.1/2]定义bool作为 C++ 中的整型。

词汇上(也就是说,就代码中的“外观”而言),[C++11: 2.12/1]将其列为关键字。实际上,all作为整数类型名称一部分的标记也是关键字,包括(但不限于):

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

然而,它是neverC++ 中的宏。相反,你会得到一个宏__bool_true_false_are_defined您可以在多语言代码中使用它来切换处理bool取决于您使用的是 C 还是 C++;请注意,我不确定我能想到一个有用的例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • 使用 Node.js 开发丰富的应用程序

    我是 Node js 的新手 需要使用 Node js 开发一个基于 Web 的丰富应用程序 现在我正在研究 Node js 的入门指南 我有机会查看该页面here并对数百个框架感到困惑 我不知道如何选择合适的框架 需要这方面的帮助才能做出
  • 从 HSQLDB 中记录 SQL 表达式

    我在我的应用程序中使用 HSQLDB 现在我需要记录执行的每一条sql语句 我不想自己处理 SQL 日志记录 HSQLDB 中是否有执行此操作的标准方法 HSQLDB 2 2 x 支持 SQL 日志记录 假设你的数据库名为test然后使用
  • OpenCV Android 背景减法

    我正在开发一个机器人项目 使用 Android 手机作为主处理器 并使用摄像头来检测运动 我拿到来自 OpenCV 的 Android 二进制包并正确安装 我可以使用 OpenCV 本机相机捕获图像并将其显示到屏幕上 不过 我在使用背景扣除
  • 带有 Rails 3.0 的 Google 地图 API

    我想知道是否有人使用过带有 Rails 3 的 Google Maps API 我正在寻找发布想法 gems 插件等 我玩过ym4r gm 插件今天几个小时 运气不太好 你在 Rails 3 上使用过这个 API 吗 提前致谢 仅供参考 我
  • C# 中的函数指针

    我想在某些方面 或两者 Delegate or MethodInfo有资格获得这个称号 然而 两者都没有提供我正在寻找的语法优美性 简而言之 有什么方法可以写出以下内容 FunctionPointer foo whatever create
  • orElse 如何在偏函数上工作

    我的行为非常奇怪 至少在我看来 orElse方法定义于PartialFunction 在我看来 val a PartialFunction String Unit case hello gt println Bye val b Partia
  • 错误:“brew link”步骤未成功完成

    我正在尝试通过 Homebrew 安装 Node js 不幸的是 我收到此错误 brew install node gt Downloading http nodejs org dist v0 8 10 node v0 8 10 tar g
  • 保存事件后触发 MS Word 宏

    我的 MS Word 2007 模板有一个页脚 其中包含文件名 用户将打开模板并执行 另存为 来制作文档 我希望页脚中显示的文件名立即更新为新文件名 有没有一个AfterSaveEvent或者我可以用作钩子来启动执行更新的 VBA 脚本的东
  • 使用迭代器时可以速记“begin..end”吗?

    怎样才能避免写作smth begin smth end 一直在使用迭代器 例如 如果您必须使用std reverse 它看起来像这样 std reverse mystr begin mystr end 但我想我在某个地方看到人们在做同样的事
  • 如何在 onStartup 和 onInstalled 上添加 Chrome 扩展侦听器?

    The chrome runtime API有一些事件可以用来将侦听器添加到上下文菜单 目前我正在使用chrome runtime onStartup像这样 chrome runtime onStartup addListener func
  • Spring Cloud Vault 和带有 Vault 后端的 Spring Cloud Config 之间的区别

    以下内容有什么区别 春云金库 http cloud spring io spring cloud vault 带有 Vault 后端的 Spring Cloud 配置服务器 http cloud spring io spring cloud
  • Raspberry Pi 自组织网络

    我想尝试使用 Raspberry Pi 进行一些网络项目 并且我只需要在一对 pi 之间发送数据包 作为第一步 我很高兴能够在临时模式下 ping 到 Raspberry Pi 尽管在网上查看了一些教程和示例 但我还没有成功地做到这一点 我
  • 回形针在开发中工作但在生产中不起作用?

    我对 Rails 还很陌生 似乎对回形针宝石有疑问 我安装了 gem 它在开发中运行良好 localhost 3000 但是当我在heroku 服务器上运行它时 由于某种原因它不想附加文件 并且应用程序中断 错误 500 页面 这是我运行的
  • 如何在Android上正确使用setZOrderMediaOverlay?

    与许多其他人一样 我尝试在相机预览 使用 SurfaceView 上绘制 3D 对象 使用 GLSurfaceView 以及放置在顶部的一些按钮 我实际上得到了一个可以工作的原型 但是我无法让 onResume 正常工作 恢复后 GLSur
  • 为什么 scanf 的转换说明符中可以嵌入空字符?

    也许我误解了我的结果 但是 include
  • IIS Express 似乎没有接受对 applicationhost.config 的更改

    我遵循了接受的答案这个问题通过在我的计算机上运行的 IIS Express 服务器进行本地调试时 尝试让我的 Net Web 应用程序在一组特定的凭据下运行 但是 我似乎无法获取更改 诚然 我不知道如何验证实际发生的情况 但我所看到的行为让
  • 类库的 app.config

    我看不到 VS2008 向导为类库生成的 app config 文件 在我的研究中 我发现应用程序中只存在一个 app config 手动将 app config 添加到类库中是一件坏事吗 还是有其他方法可以实现类库中 app config
  • Adobe .jsx 脚本可以包含其他脚本文件吗?

    我们正在编写一堆 jsx 脚本 在每个脚本中我都必须模拟一些函数 以便我可以使用 Array map 和 String trim 之类的东西 但我不想包含该代码在每个脚本的顶部 有没有办法在 jsx 脚本文件中 包含 其他 jsx 脚本 或
  • React Native无法使用Android模拟器连接到react-devtools

    我执行该项目react native run android在另一个终端中 我这样做 npm run react devtools 它打开了电子的新窗口 上面写着 React Native 应用程序将在几秒钟内打开 但什么也没发生 I pu
  • C/C++ 中的 bool 是什么?关键字还是宏?

    我提到这个问题 其中一些答案表明bool是整型 IDE 也将其视为关键字 然而 没有一个答案表明中提供的信息cplusplus 这说明了bool是一个宏 通过添加