为什么这个编译:
int main()
{
{}
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
{}
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
Bru*_*uce 33
首先,您要在函数内定义一个块,这是允许的(它限制了可见性).第二种情况,你要定义一个匿名块,这是不允许的(它需要由函数定义预先设置,否则,编译器永远不会知道它何时必须执行它)
Ste*_*sop 19
{}是一个do-nothing语句(特别是在C语法中它是一个空的复合语句).您可以在函数中放置语句.你不能把陈述放在其他地方.
我认为标准在第一个例子中没有禁止空语句的原因是,尽管它没有意义,但它没有任何损害,并且引入规则以允许大括号被允许为空时会使语法复杂化而没有任何好处.
并且,为了迂腐,我想我应该指出,语法也没有在文件范围定义任何其他构造,其中{}是一个有效的实例,这就是为什么第二个无效的原因.
因为在C中不允许在全局范围中定义代码.请记住,在C中,每行代码但变量声明/初始化必须位于一个函数中.
如果你在一个函数内,你可以拥有{}你想要的所有块.