我知道单行块不需要花括号,例如if语句等,但它们是否需要一行函数?
例如:
public int foo(int bar)
return bar;
public int foo(int bar)
{
return bar;
}
这些是否同样有效,或者第一个例子不是?
我正在寻找与C系列和类似语言(C,C ++,C#,Java等)相关的答案。
答案 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)
对于函数,有必要对于不同的条件循环,一行不需要大括号。