[英]Curly Braces in C and C++
為什么這個編譯:
int main()
{
{}
}
但這不是:
{}
int main()
{
}
首先,您要在函數內定義一個塊,這是允許的(它限制了可見性)。 第二種情況,你要定義一個匿名塊,這是不允許的(它需要由函數定義預先設置,否則,編譯器永遠不會知道它何時必須執行它)
{}
是一個do-nothing語句(特別是在C語法中它是一個空的復合語句 )。 您可以在函數中放置語句。 你不能把陳述放在其他地方。
我認為標准在第一個例子中沒有禁止空語句的原因是,盡管它沒有意義,但它沒有任何損害,並且當允許大括號空的時候引入規則會使語法復雜化而沒有任何好處。
並且,為了迂腐,我想我應該指出,語法也沒有定義文件范圍內的任何其他構造,其中{}
是有效實例, 這就是第二個無效的原因。
因為在C中不允許在全局范圍中定義代碼。 請記住,在C中 , 每行代碼但變量聲明/初始化必須位於一個函數中。
如果你在一個函數內,你可以擁有你想要的所有{}
塊。
因為可能出現在翻譯單元頂層的唯一事物是聲明或函數定義; 復合語句(空或不)可能不會出現在該級別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.