包围返回值的括号

通常在ANSI C代码中,我可以看到圆括号包含单个返回值。

喜欢这个:-

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

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

真的没有理由……这只是老约定。

为了节省空间,程序员经常会在返回行中做最后的计算,而不是在自己的行上,并且确保主要是在那里,以便更容易地看到它是一个返回的单个语句,如下所示:

 return (x+i*2); 

代替

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

括号成了一个习惯,而且卡住了。

一个实际但不太可能的动机是,如果将括号括起来,则可以将return定义为macros,然后插入一些日志代码来观察所有的回报。

如果有复杂的expression方式,我的个人风格是使用圆括号; 例如,

 return (a + b); 

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

 return a; 

我不能说为什么我这样做, 只是我早就拿起的东西。

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

 return(a); // ugh 

是令人难以置信的丑陋,只是错误的。

有几个原因:

  1. 如果/当/为/ etc中。 都是必须有parens的控制关键字。 所以总是让他们回归自然也是很自然的。

  2. sizeof是唯一可以有或没有的其他关键字,除了在某些情况下,您必须使用parens。 所以更容易养成总是使用parens的习惯。 对于sizeof,这意味着一个逻辑:如果可以的话,总是这样做。

  3. case / goto是唯一的关键字,你永远不会使用parens。 …人们倾向于将这些视为特殊情况(并且像他们一样从其他控制关键字中脱颖而出,特别是goto)。

当在你的excample中返回-1时,我认为它的括号更具可读性,因为减号更明显:

 return 1 

要么

 return -1 

要么

 return (-1) 

也许是定制的 – 毕竟,带给我们Unix和C的人来自Multics项目。 Multics是用PL / I编写的,而在PL / I中,括号是强制性的。

我曾经和至less一个程序员一起工作过,他认为return 一种特殊的函数调用,当他看到我的代码没有parens的时候,它就感到惊讶。

通常情况下,当使用括号,我认为这只是为了可读性(例如,Ruby支持方法调用w / o括号括住参数,但最近的书籍和文章build议否则)。

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

或者只是每个人都这样做,只是因为其他人都这样做:-)

在最初的C规范中,围绕返回值需要括号。 虽然现代的C编译器和ANSI C标准并不要求它们,但是括号的存在并不影响返回值,程序员有时仍然把它们排除在习惯之外,对标准不熟悉,与需要它们的风格惯例保持一致,或者可能为了向后兼容。

返回语句中的括号向编译器指出,您打算将此值返回到堆栈而不是内存中。

在过去,这是严格执行(通常),但今天大多数编译器只是把它作为一个暗示。

这是我经常做的事情,因为错误可能会破坏任何通过内存引用返回的内容,但通常不会影响堆栈上返回的variables。

对瞬态variables使用堆栈也减less了内存使用量,并且通常使得函数调用/返回更快,因为堆栈devise的是瞬态数据/variables。

在return语句中使用括号显示对C/C++语法的不足把握。 就这么简单。 但是,把所有东西都放在花括号里并不是一件坏事:

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

很多程序员都这样做。 如果你们其中一位读到这个,也许你可能想解释一下。