2015-04-14 49 views
-2

我知道单行块不需要大括号,比如if语句等,但它们是否需要一行代码?单线功能需要大括号吗?

例如:

public int foo(int bar) 
    return bar; 

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

难道这些都同样有效,或将第一个例子不?

我正在寻找有关C族和类似语言(C,C++,C#,Java等)的答案。

+12

为什么不编译看看? –

+1

Ofcourse,它的语法。我们需要大括号 – HJK

+0

是的,方法体进入大括号内。 –

回答

1

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

1

功能定义需要使用大括号。它们是语言的一部分,不是可选的。

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

所以这是problem.Hope这可以帮助的东西,如果你运行这个

发生什么事。

正确的语法

int foo(int x) 
{ 
return x+y; 
} 

答案将是..oh!你运行它!这个想法将被清除。

Ç语法(礼貌-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

对于函数它是对于不同的条件循环但是必要的一部分,括号不需要用于一行。