为什么C允许空声明?它们都在语法级别明确允许,并且只有在编译时才会生成警告。
来自C标准附录A的作品declaration
允许它在语法层面:
declaration
= declaration_specifiers , ";"
| declaration_specifiers , init_declarator_list , ";"
| static_assert_declaration
;
(由我转为EBNF
)
答案 0 :(得分:5)
C不允许空声明。见https://stackoverflow.com/a/33273777/103167
但它允许声明没有任何声明符,只有说明符,只要这些说明符创建一个类型标记。例如:
/* here begins the specifier */
struct tagS /* <-- there's the tag */
{
int x;
} /* here ends the specifier */
/* no declarators */
;
这是定义用户定义类型结构的完全有用且合法的方法。
这就是为什么语法必须将声明者列表指定为可选。