单行函数是否需要大括号?

Are braces required for one-line functions?

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

例如:

public int foo(int bar) 
    return bar;

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

这两个是否同样有效,还是第一个例子不是?

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

在 Java 中,您需要大括号,以便编译器将方法声明后的行检测为方法代码的一部分。

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

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

当您为任何必须处理变量的 scope 和生命周期的语言设计编译器时,请注意。像 在 C

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

Output: 2014

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

So in a word you have to understand where new scope should be opened. That's what the '{' braces does. We can say that when compiler sees a '{' then obviously a scope begins and it ends when it encounter a '}'. This will help us store and manipulate the identifiers (well :-) it is symbol table throuh which we do this).

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

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));
}

这就是 problem.Hope 这有帮助。

如果你 运行 使用正确的语法

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 '}'
    ;

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