通常在ANSI C代码中,我可以看到括号中的单个返回值。
像这样: -
int foo(int x) {
if (x)
return (-1);
else
return (0);
}
为什么在这些情况下使用()围绕返回值?有任何想法吗?我没有理由这样做。
答案 0 :(得分:56)
真的没有理由......这只是旧惯例。
为了节省空间,程序员经常在返回行中进行最后的数学运算,而不是在它自己的行上,并且parens确保大多数情况下更容易看到它是返回的单个语句,如下所示:
return (x+i*2);
而不是
int y = x+i*2;
return y;
括号成了一种习惯而且卡住了。
答案 1 :(得分:47)
一个实际的,但不太可能的动机是,如果你在值周围加上括号,你可以将return定义为宏,然后插入一些日志代码来观察你的所有回报。
答案 2 :(得分:23)
如果有复杂的表达,我的个人风格是使用括号;如,
return (a + b);
但如果表达式是一个简单的术语,则不要使用它们
return a;
我不能说我为什么这样做;就是我很久以前买的东西。
顺便说一句,我认为让它看起来像一个函数调用,如下所示:
return(a); // ugh
令人难以置信的丑陋而又错误。
答案 3 :(得分:14)
In the original C specification, parentheses were required around the return value.虽然现代C编译器和ANSI C标准不需要它们,但是括号的存在不会影响返回值,程序员有时仍会将它们排除在习惯之外,不熟悉标准,以保持一致性具有需要它们的风格约定,或者可能是为了向后兼容。
我应该补充一点,对于那些正在考虑C ++的人来说:这个问题是关于C而C不是C ++;这些是两种不同的语言,具有不同的标准,能力,难度和不同的使用方式 - 无论它们有什么共同点,将它们视为两个完全独立的东西是明智的。有关涵盖C ++的类似问题,请参阅Are parentheses around the result significant in a return statement?。
答案 4 :(得分:13)
有几个原因:
如果/当/对/等。是必须具有parens的所有控制关键字。因此,总是把它们归还给它们似乎很自然。
sizeof是唯一可以拥有它们的其他关键字,除了在某些情况下必须使用parens。所以更容易养成总是使用parens的习惯。对于sizeof,这意味着一个逻辑:如果可以,总是这样做。
case / goto是您从不使用parens的唯一关键字。 ......人们倾向于认为这些是特殊情况(并且他们都喜欢从其他控制关键词中脱颖而出,尤其是goto。)
答案 5 :(得分:8)
当你在例子中返回-1时,我认为用括号更可读,因为减号更明显:
return 1
或
return -1
或
return (-1)
答案 6 :(得分:4)
也许这是习惯 - 毕竟,给我们带来Unix和C的人来自Multics项目。 Multics是用PL / I编写的,在PL / I中,括号是强制性的。
答案 7 :(得分:2)
通常情况下使用括号时,我认为这仅仅是为了可读性(例如,Ruby支持没有括号的方法调用,但最近的书和文章建议不这样做。)
答案 8 :(得分:2)
我和至少一位认为返回是某种特殊功能调用的程序员合作过,当他看到我的代码没有填充时,我感到很惊讶。
答案 9 :(得分:-4)
返回语句中的括号表示您希望在堆栈而不是内存中返回此值。
在过去,这是严格执行的(通常),但今天大多数编译器只把它作为提示。
这是我经常做的事情,因为错误可能会破坏通过内存引用返回的任何内容,但通常不会影响堆栈上返回的变量。
使用堆栈作为瞬态变量也会减少内存使用量,并且通常会使函数调用/返回更快,因为堆栈的设计目的是瞬态数据/变量。
答案 10 :(得分:-5)
在return语句中使用括号表示对C/C++
语法的掌握不足。就这么简单。但它并不像把所有东西放在花括号中那么糟糕:
int foo(int x) {
if (x) {
return (-1);
}
else {
return (0);
}
}
这么多程序员都是这样做的。如果你们其中一个人读到这个,也许你可能想解释一下。