C 中布尔表达式的返回值

2023-12-11

由于不值得一提的原因,我想知道布尔表达式是否有标准定义值。例如。

int foo () {
    return (bar > 5);
}

背景是我担心我们的团队将 TRUE 定义为与 1 不同的东西,并且我担心有人可能会这样做:

if (foo() == TRUE) { /* do stuff */ }

我知道最好的选择就是简单地做

if (foo())

但你永远不知道。

布尔表达式是否有定义的标准值或者由编译器决定?如果有的话,标准值是否包含在C99中? C89呢?


一个运算符,例如==, !=, &&, and ||如果表达式为真,则生成布尔值,结果为 1;如果表达式为假,则结果为 0。这个表达的类型是int.

所以如果TRUE宏未定义为1,像上面这样的比较将会失败。

当在布尔上下文中计算表达式时,0 计算结果为 false,非零计算结果为 true。所以为了安全起见,TRUE应定义为:

#define TRUE (!0)

正如评论中提到的,如果您的编译器兼容 C99,您可以#include <stdbool.h>并使用true and false.

根据C99:

6.5.3.3(一元算术运算符)

逻辑非运算符的结果!为 0,如果 其操作数的值比较不等于 0,如果其值不等于 1 操作数比较等于 0。结果具有类型int。这 表达!E相当于(0==E).

6.5.8(关系运算符)

各运营商<(少于),>(比...更棒),<=(小于或等于),并且>=(大于或等于) 如果指定的关系为真,则应产生 1;如果为假,则应产生 0。 结果有类型int.

6.5.9(相等运算符)

The ==(等于)和!=(不等于)运算符是 类似于关系运算符,除了它们的较低值 优先。如果指定的话,每个运算符都会产生 1 关系为 true,如果为 false,则为 0。结果有类型int.

6.5.13(逻辑与运算符)

The &&如果两个操作数比较,运算符应产生 1 不等于0;否则,它产生 0。结果具有类型int.

6.5.14(逻辑或运算符)

The ||如果任一操作数比较,运算符应产生 1 不等于0;否则,它产生 0。结果具有类型int.

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

C 中布尔表达式的返回值 的相关文章

随机推荐

  • 未捕获的类型错误:无法设置未定义的属性“nodeId”

    检索 bootstrap treeview 的 JSON 数据时 我在 bootstrap treeview js 267 上收到此错误 document ready function ajax url js category data p
  • Moment.js - 两个日期的天数差异

    当尝试查找两个日期之间的数字差异时 我得到不正确的结果 var startDate moment name date start val DD MM YYYY name date start val 13 04 2016 endDate m
  • 根据相关的 id 列表对集合重新排序

    我有一个对象集合 无序 id属性 以及 有序 列表ids id列表未排序 我想在我的集合中创建一个对象列表 根据 id 列表进行排序 我在 Guava 或 Apache Commons 中没有看到这种方法 但这正是我正在寻找的 一个具有良好
  • 迭代解析 JSON 文件

    我有 1000 多个 JSON 文件 看起来像 name Some name part num 123456 other config Large amount of objects some more Large amount of ob
  • iOS UIPopoverController 透明度/alpha

    我正在制作一个 iPad 应用程序 客户想要一个具有透明度 alpha 的弹出概览 他们给了我一个示例应用程序 可以找到屏幕截图here 我读过 UIPopoverController 是最难定制的东西 因为只有几个属性需要设置 LINK
  • MySQL TimeDiff 排除周末

    我一直在 MySQL 表上使用 TimeDiff 来获取两个字段 均为日期时间格式 之间的差异 这是我正在使用的查询 它也将持续时间限制为仅今年 SELECT username CONCAT FLOOR SUM HOUR TIMEDIFF
  • 如何在Struts 2中显示图像?

    我需要检索数据库中的行 并将图像保存在字节数组中 如何使用Strut2显示图像 我已经使用自定义结果显示了它 我传递了 id 并在数据库中对其进行了操作搜索 我的问题是如何多次调用它 我有一个检索所有行的操作 如何从列表操作中调用显示图像操
  • SQLAlchemy 中的 REGEXP_LIKE

    任何人都知道我如何在 SQLAlchemy 中使用 REGEXP LIKE 的等效项 例如 我希望能够执行以下操作 sa Session query sa Table filter sa Table field like regex to
  • 为什么在没有类型转换的情况下复合文字赋值不起作用

    我有一个关于 C 语言文字的问题 int a a is an integer that is assigned an integer literal 414 a 414 float b b is a float that is assign
  • 使用 broom 包整理地图时保留区域名称

    我正在使用栅格包中的 getData 函数来检索阿根廷地图 我想使用 ggplot2 绘制生成的地图 因此我使用 broom 包中的 tidy 函数转换为数据框 这工作正常 但我不知道如何保留联邦地区的名称 以便我可以在地图上使用它们 这是
  • 导入旧的 ES5 模块以在 ReactJS 组件中使用

    我正在尝试在新的 ReactJS 应用程序中使用 ES5 模块 并且我正在努力理解如何正确导入该模块 以便可以找到并执行其中的主要函数 我正在加载模块 import air datepicker 我知道我在这里做错了 而且对于一个没有适当导
  • Python 并排带有颜色的 matplotlib 箱线图

    我按照这个例子link关于如何创建带有颜色的箱线图 我一直在尝试不同的方法来将这些箱线图分开在两个不同的位置 而不是让它们重叠 但无济于事 如果我为它们指定不同的位置 它们将保持在 bp2 位置 如何将这两个箱线图并排放置 import m
  • 如何在同一个消费者组中运行两个控制台消费者?

    当我运行两个具有完全相同属性的 Kafka console consumers 实例 使用默认的 config consumer properties 时 我在两个实例上收到相同的消息 bin kafka console consumer
  • 使用 VBA 将 url 发送到活动 IE 窗口

    我正在使用 VBA 并在 Excel 中创建宏以向 IE 浏览器窗口发送信息或从 IE 浏览器窗口发送信息 我一直在使用 AppActivate 来关注某个 IE 页面 使用它的标题 效果很好 使用 SendKeys 将信息发送回浏览器并没
  • 如何使用 jquery if else 语句切换类?

    我想使用 jquery If Else 语句针对指定条件切换类 我的 Html 带有默认 cssclass horizontal div class my item horizontal div 现在我怎样才能在之间洗牌我的CSS类hori
  • Phonegap:安装适用于 iOS 的 BarcodeScanner 时出错

    当我尝试安装 iOS 版 BarcodeScanner 插件时 plugman install platform ios project Users amarruffo Documents Projects phonegap barcode
  • 如何在ggplot中标记堆叠直方图

    我正在尝试将相应的标签添加到直方图中条形图中的颜色 这是一个可重现的代码 ggplot aes displ data mpg geom histogram aes fill class binwidth 1 col black 此代码给出了
  • 无法使用“-”破折号访问 JSON 属性 [重复]

    这个问题在这里已经有答案了 当字符串具有破折号字符时 我无法从 json 对象检索值 profile id 1234 user id 6789 如果我尝试引用解析的jsonObj profile id它返回ReferenceError id
  • ASP.Net Core 3 远程证书在 MacO 上无效

    当我尝试使用 Identityserver4 调用 API 方法时 我之前在 Windows 上尝试过 但它仅在 Mac OS 中工作正常 我遇到了这个问题 我不知道发生了什么以及如何解决它 我可以访问 https localhost 60
  • C 中布尔表达式的返回值

    由于不值得一提的原因 我想知道布尔表达式是否有标准定义值 例如 int foo return bar gt 5 背景是我担心我们的团队将 TRUE 定义为与 1 不同的东西 并且我担心有人可能会这样做 if foo TRUE do stuf