2015-04-14 86 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

對於函數它是對於不同的條件循環但是必要的一部分,括號不需要用於一行。