我在程序中有一个函数应该返回一个int,但是返回看起来像这样:
return wordlength > 6.0 && wordlength< 9.0
&& strcasestr (string, "substring1") && strcasestr (string, "substring2")
&& strcasestr (string, "substring2") && strcasestr (string, "substring4")
wordlength是一个double值,其中包含字符串中单词的平均长度。
我的问题是return语句实际上返回什么?
最佳答案
运算符优先级规则说,像<
这样的关系运算符优先于&&
。因此,子表达式wordlength > 6.0 && wordlength< 9.0
等效于(wordlength > 6.0) && (wordlength< 9.0)
。
解决后,请注意&&
具有从左到右的关联性。这意味着,如果在同一表达式中存在多个具有相同优先级的相同运算符,例如a && b && c
,则它等效于(a && b) && c
。
像&&
这样的逻辑运算符具有“短路”评估顺序。这意味着在0 && b
中,仅对操作数0
进行评估/执行。见Is short-circuiting logical operators mandated? And evaluation order?
最后,C语言中的逻辑表达式不会产生布尔类型(类似于C ++),而是产生值int
或1
的0
。即使类型为int
,也可以将其视为类型为bool
,并且可以安全地编写诸如bool b = x && y;
之类的代码。