return C 语句中的逻辑运算符

Logic operators in return statement in C

我最近在学习C,并且遇到了一些return语句中包含逻辑运算符,即

return(statement LOGIC statement);

其中语句的计算结果为 True 或 false(即 1 或 0),LOGIC 是逻辑运算符,如 &&、||等等

这是好的编码习惯吗,因为我觉得有点不对劲,使用 if/else if 语句不是更好吗?

这种编码实践没有任何问题,实际上您不需要括号。谨防懒惰评估。

return foo1() && foo2()

如果调用 foo1 的 return 值为 false foo2 永远不会被调用。

这取决于程序员。很少有人愿意使用逻辑运算符和 return 0 或 1,而其他人可能会觉得有点不对劲。

实际上,两者在工作方式上没有任何区别;而且我并不完全认为这是一种糟糕的编程习惯。

但是,是的,ifelse 可能具有更高的可读性,从而帮助读者。

省略 if 是很好的编码风格。使用 if cond return true else return false 太长且多余。

重要的是您的喜好。但是,查看复杂的解决方案并实现它们通常可以帮助您理解 C 语言的复杂细节。一个简单的演示是:

 char mystring[10];
 //assume you take the input
 //to print it:
 int i;
 for(i=0;mystring[i]!='[=10=]';i++)
 printf("%c",mystring[i]);

上面可以用复杂的方式重写:

char *ch;
for(ch=mystring; *ch; ch++)
printf("%c",*ch);

这很好地展示了如何评估指针的复杂细节。理解这一点并使用它肯定会显示并帮助您更好地理解 C。

所以,不要忽视复杂的表示,我将使用我自己的简化版本。

我更愿意

return a && b;

int result = a && b;
return result;

只是因为搞砸的机会少了。如果你写

if ( a && b )
  return true;
else
  return false;

你总是 运行 有错误理解测试意义的风险(即 returning false 当你想要 return true和 vice-versa)。这不是 重大 风险,但它确实存在。

在 C99 为 truefalse 引入 built-in 符号常量之前,人们通常定义自己的 TRUEFALSE 宏。问题是,其中一些人偶尔会 mis-spell 01。我曾经花了一个下午追着我的尾巴,因为有人丢了一个 header,其中 TRUEFALSE 扩展为 相同的值

并非巧合,那是我开始使用 return expr 而不是 return TRUEreturn FALSE 的时候。