单行函数是否需要大括号?
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 '}'
;
对于函数,这是必需的,但是对于不同的条件循环,一行不需要大括号。
我知道单行块不需要花括号,例如 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 '}'
;
对于函数,这是必需的,但是对于不同的条件循环,一行不需要大括号。