通常自动生成的c ++"main"函数最后都有
return (0);
Run Code Online (Sandbox Code Playgroud)
要么
return (EXIT_SUCCESS);
Run Code Online (Sandbox Code Playgroud)
但为什么上述陈述中有括号?它与C语言有关吗?
//编辑
我知道这是正确的,但有人把这些括号放在原因之内.什么原因?!
sje*_*397 10
它们不是必需的(即使在c中).我认为有些人使用它们使'返回'看起来更像是一个函数调用,认为它更加一致.
编辑:由于它自己的原因,发电机可能会这样做.以这种方式工作可能更安全或更容易.
但为什么上述陈述中有括号?它与C语言有关吗?
不.据我所知,C从来没有要求括号用于返回语句.即使在第一个ANSI C标准之前,情况似乎也是如此.
这实际上是一个非常有趣的问题,因为我已经看到这种风格在某些C程序员中很普遍.
我认为最有可能猜测为什么这种风格出现是因为所有其他分支语句(for,while,if,switch)需要围绕表达式的括号.人们可能没有意识到他们可以省略返回语句的括号或者意识到这一点,但希望对他们的代码实现更统一的外观.
三元?:运算符是一个例外,因为它是一个运算符,并且不需要围绕条件表达式的括号,但人们经常在那里写括号而不管它是否需要.有些人可能会发现它可以将表达式"组合"成一个单独的单元.
我的第二个最好的猜测是,这种风格受到当时流行的其他语言的影响.然而,当时流行的,程序化的替代方案,如Pascal也不需要语法(Pascal甚至没有C语义中的返回值,只有输出参数)所以如果是这种情况,我不知道任何特定的语言这种风格起源于此.
[主观]我更喜欢需要对代码进行最少量多余装饰的样式,无论是命名约定还是如何格式化,或者是否在不必要的地方使用额外的括号.我发现任何这样的装饰往往是一个独特的个人偏好问题,并且爱上一种装饰代码的方式只意味着有一天你将不得不以完全不同的方式处理(除非你严格单独工作,在这种情况下我羡慕你).[/主观]
这实际上是BSD内核源文件样式的要求.
man 9 style 说:
关键字后面的空格(if,while,for,return,switch).
和
return语句中的值应括在括号中.
由于任何有效的表达式都可以传递给return,因此可以根据需要添加这些括号.就像这样做:
int i = (0);
Run Code Online (Sandbox Code Playgroud)
您可以根据需要在多个括号中嵌套表达式:
return (((((0)))));
Run Code Online (Sandbox Code Playgroud)
事情随着decltype(auto)在c ++ 14中的使用而改变,以推断出返回类型.如果使用括号,则推断返回的类型为引用:
decltype(auto) foo1() {
int n;
return (n); // parentheses causes return type to be int&
}
decltype(auto) foo2() {
int n;
return n; // no parentheses causes return type to be int
}
template<typename T> struct TD;
int main()
{
// main.cpp:19:22: error: aggregate 'TD<int&()> f1' has incomplete type and cannot be defined TD<decltype(foo1)> f1;
TD<decltype(foo1)> f1;
// main.cpp:20:22: error: aggregate 'TD<int()> f2' has incomplete type and cannot be defined TD<decltype(foo2)> f2;
TD<decltype(foo2)> f2;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3794 次 |
| 最近记录: |