Bru*_*uce 33

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


Ste*_*sop 19

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

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

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

  • @Acme:Steve的回答是针对C.对于C++,答案是类似的:在函数定义中,包含`{}`的语句是有效的.没有其他地方允许声明.还有`{}`(命名空间,类,结构,联合,枚举,初始化,链接规范)的其他用途,但所有这些都需要更多的令牌才能成为有效的语法,而不仅仅是`{}`. (7认同)

Pab*_*ruz 5

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

如果你一个函数内,你可以拥有{}你想要的所有块.

  • @BlackBear:是的,但它们不是C语句.它们只是宏预处理器. (6认同)