括号内的返回值

时间:2020-03-06 15:01:18  来源:igfitidea点击:

在ANSI C代码中,经常可以看到括号将单个返回值括起来。

像这样:-

int foo(int x) {
  if (x)
    return (-1);
  else
    return (0);
}

在这种情况下,为什么要在返回值周围使用()?有任何想法吗?我看不出有什么理由。

解决方案

经常在使用括号的情况下,我认为这只是为了提高可读性(例如,Ruby支持不带括号的方法调用,但将参数括起来,但最近的书籍和文章建议不要这样做)。

确实没有理由……这只是古老的惯例。

为了节省空间,程序员通常会在返回行中而不是在返回行中进行最后的数学运算,并且确保大多数都位于括号内,以便更轻松地看到返回的是单个语句,例如:

return (x+i*2);

代替

int y = x+i*2;
return y;

圆括号成为一种习惯,并且被卡住了。

也许这是因为用括号它看起来更像是一个函数调用,即看起来更像是代码的其余部分?

或者仅仅是每个人都在做的事,只是因为其他人都在做:-)

我的个人风格是在表达式复杂的情况下使用括号;例如。,

return (a + b);

但如果表达式是一个简单术语,则不要使用它们

return a;

我不能说为什么要那样做。只是我很久以前捡到的东西。

顺便说一句,我认为使它看起来像一个函数调用,如下所示:

return(a);  // ugh

非常丑陋,而且是错误的。

有几个原因:

  • 如果/当/为/等。是所有必须具有括号的控制关键字。因此,经常将它们也放回去似乎很自然。
  • sizeof是唯一可以包含或者不包含它们的其他关键字,除了在某些情况下必须使用parens之外。因此,更容易养成始终使用parens的习惯。对于sizeof,这表示以下逻辑:如果可以,请始终这样做。
  • case / goto是从未使用过括号的唯一关键字。 ...并且人们倾向于将它们视为特殊情况(并且希望它们都在其他控制关键字(尤其是goto)中脱颖而出)。

一个实用的但不太可能的动机是,如果在值周围加上括号,则可以将return定义为宏,然后插入一些日志记录代码来监视所有返回值。

我曾与至少一位程序员合作,他认为return是某种特殊的函数调用,当他看到我的代码在没有括号的情况下编译时感到惊讶。

在示例中返回-1时,我认为括号内的内容可读性更好,因为减号更为明显:

return 1

或者

return -1

或者

return (-1)