括号内的返回值
时间: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)