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 是什么?关键字还是宏? 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName

随机推荐

  • 使用 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是一个宏 通过添加