逻辑运算符在C语句中的return语句中

Dan*_*elJ 3 c logic coding-style return

我最近一直在学习C,并且遇到了一些带有逻辑运算符的return语句,即

return(statement LOGIC statement);
Run Code Online (Sandbox Code Playgroud)

当语句评估为True或false(即1或0)时,LOGIC是一个逻辑运算符,如&&,|| 等等

这是一个很好的编码实践,因为对我来说似乎有点不对,使用if/else if语句会不会更好?

Man*_*dis 10

这种编码实践没有任何问题,实际上你不需要括号.小心懒惰的评价.

return foo1() && foo2()

如果调用的返回值为foo1false,则foo2永远不会被调用.

  • "短路"显然更为常见,但在这种情况下我保持"懒惰评估"同样正确.[Wikipedia](https://en.wikipedia.org/wiki/Lazy_evaluation)说"布尔控制结构的短路评估有时被称为懒惰". (2认同)

Joh*_*ode 5

我宁愿做

return a && b;
Run Code Online (Sandbox Code Playgroud)

要么

int result = a && b;
return result;
Run Code Online (Sandbox Code Playgroud)

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

if ( a && b )
  return true;
else
  return false;
Run Code Online (Sandbox Code Playgroud)

您总是冒着使测试感产生错误的风险(即,false在您打算返回时返回true,反之亦然)。这不是很大的风险,但是确实存在。

在C99为true和引入内置符号常量之前false,人们通常定义自己的TRUE和FALSE宏。问题是,其中的一些人偶尔会误拼写0和1。我曾经花了一个下午追逐我的尾巴,因为有人在那里放了一个头TRUE并FALSE扩展到同样的值。

并非巧合的是,那是我开始使用return expr代替return TRUE或的时候return FALSE。