单线功能需要括号吗?

时间:2015-04-14 11:33:08

标签: java c# c++ c coding-style

我知道单行块不需要花括号,例如if语句等,但它们是否需要一行函数?

例如:

public int foo(int bar) 
    return bar;

public int foo(int bar) 
{
    return bar;
}

这些是否同样有效,或者第一个例子不是?

我正在寻找与C系列和类似语言(C,C ++,C#,Java等)相关的答案。

4 个答案:

答案 0 :(得分:2)

当您阅读答案时,您可能会知道问题的答案 - 它的语法,您无法避免。但我会更进一步解释为什么会这样呢?

看看您为任何语言设计编译器时必须处理scope和变量的生命周期。喜欢  在C

int p=2015;
int foo()
{ ~~~~~~~~~~~~~~~~~~~~~~~>
    int p=2014;          |
    printf("\n %d ",p);  |  This is the local scope 
    return p;            |
} ~~~~~~~~~~~~~~~~~~~~~~~>
  

产出:2014

现在按照规则,我们总是在局部范围内寻找变量,然后逐渐向外部范围寻找。

  

总而言之,您必须了解应该打开新范围的位置。这就是' {'大括号呢。我们可以说当编译器看到' {'然后很明显一个范围开始,它在遇到一个'时结束。这将帮助我们存储和操作标识符(好吧:-)它是符号表,我们这样做)。

如果标准支持您所说的内容,会发生什么? :-(提前问题

int x=100;
int y=200;
int foo(int x)
 return x+y;-~~~~~~~~~~~> which x :-( the one that I have got as a parameter or the global one.

int main()
{
   int x=2;
   printf("%d\n",foo(x));
}

所以这就是问题。希望这有帮助。

如果使用正确的语法

运行它
int foo(int x)
{
 return x+y;
}

答案是......哦!你跑吧!这个想法很清楚。

C语法的一部分(礼貌-Lysator)

function_definition
    : declaration_specifiers declarator declaration_list compound_statement
    | declaration_specifiers declarator compound_statement
    | declarator declaration_list compound_statement
    | declarator compound_statement
compound_statement
    : '{' '}'
    | '{' statement_list '}'
    | '{' declaration_list '}'
    | '{' declaration_list statement_list '}'
    ;

答案 1 :(得分:1)

在Java中,编译器需要使用大括号来检测方法声明之后的行,作为方法代码的一部分。

答案 2 :(得分:1)

是函数定义需要大括号。它们是语言的一部分,而不是可选的。

答案 3 :(得分:1)

对于函数,有必要对于不同的条件循环,一行不需要大括号。