C和C ++中的卷曲大括号

时间:2011-04-15 16:26:45

标签: c++ c

为什么要编译:

int main() 
{
    {}  
}

但这不是:

    {}

int main() 
{  
}

4 个答案:

答案 0 :(得分:33)

首先,您要在函数内定义一个块,这是允许的(它限制了可见性)。 第二种情况,你要定义一个匿名块,这是不允许的(它需要由函数定义预先设置,否则,编译器永远不会知道它何时必须执行它)

答案 1 :(得分:19)

{}是一个无操作语句(特别是在C语法中它是一个空的复合语句)。您可以在函数中放置语句。你不能把陈述放在其他地方。

我认为标准在第一个例子中没有禁止空语句的原因是,尽管它没有意义,但它没有任何损害,并且引入允许大括号为空的规则会使语法复杂化而没有任何好处。

并且,为了迂腐,我想我应该指出,语法也没有定义文件范围内的任何其他构造,其中{}是有效实例,而为什么第二个是无效的。

答案 2 :(得分:5)

因为 C 中不允许在全局范围内定义代码。请记住,在 C 中,每行代码但变量声明/初始化必须位于函数中。

如果你 一个功能,你可以拥有你想要的所有{}块。

答案 3 :(得分:3)

因为翻译单元顶层可能出现的唯一内容是声明或函数定义;复合语句(空或不)可能不会出现在该级别。