我在程序中有一个函数应该返回一个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 ++),而是产生值int10。即使类型为int,也可以将其视为类型为bool,并且可以安全地编写诸如bool b = x && y;之类的代码。

09-19 21:29