c - 逻辑运算符作为回报
问题描述
我在程序中有一个函数应该返回一个 int,但返回看起来像这样:
return wordlength > 6.0 && wordlength< 9.0
&& strcasestr (string, "substring1") && strcasestr (string, "substring2")
&& strcasestr (string, "substring2") && strcasestr (string, "substring4")
wordlength 是一个双精度值,包含字符串中单词的平均长度。
我的问题是 return 语句实际上返回了什么?
解决方案
运算符优先级规则表示关系运算符<
优先于&&
. 因此子表达式wordlength > 6.0 && wordlength< 9.0
等价于(wordlength > 6.0) && (wordlength< 9.0)
。
整理好之后,请注意它&&
具有从左到右的关联性。这意味着如果在同一个表达式中存在多个具有相同优先级的相同运算符,例如a && b && c
,则它等价于(a && b) && c
。
逻辑运算符 like&&
具有“短路”评估顺序。这意味着在 中0 && b
,只有操作数0
被评估/执行。请参阅是否强制使用短路逻辑运算符?和评价顺序?
最后,C 中的逻辑表达式不会产生布尔类型(如在 C++ 中),而是产生int
值1
or 0
。即使类型是int
,这也可以认为它是类型bool
,并且您可以安全地编写诸如bool b = x && y;
.
推荐阅读
- coq - 如何在 Coq 中不使用自动化策略来证明这个 DeMorgan 定律?
- c# - ASP.Net Core:更改密码时数据库连接失败,但重新启动应用程序时可以工作
- python - 在 python 请求模块时采用 1 个位置参数但 2 个错误
- angular - 在 mac 上检测 cmd + c 以在 Angular 应用程序中进行复制
- blazor - Blazor - 如何禁用对未使用的帐户页面的访问
- excel - 如何确定自由形状是开放轮廓还是封闭轮廓?
- r - 个体患者数据 (ipd) 荟萃分析
- discord.py - 不和谐狙击编辑的消息不起作用
- python - 如何将一行代码转换为 for in 循环?
- vue.js - VueJs 集成外部脚本(Spreadshop)