请考虑以下程序(请参阅此处的实时演示).
#include <stdio.h>
int main(void)
{
int ; // Missing variable name
puts("Surprise");
}
Run Code Online (Sandbox Code Playgroud)
我的编译器gcc 4.8.1给出了以下警告:
[警告]空声明中无用的类型名称[默认启用]
为什么编译好?我不应该得到编译错误吗?当我将它编译为C++程序时,g ++ 4.8.1给出以下错误:
[错误]声明没有声明任何内容[-fpermissive]
在阅读标准时,我真的很惊讶地看到,实际上,名称在声明中是可选的:
struct Magic {};
int main() {
int; // well-formed
Magic; // well-formed
}
Run Code Online (Sandbox Code Playgroud)
对于那些有兴趣阅读标准的人来说,这是因为在简单声明中,init-declarator-list是可选的.这是一个演示.
所以我真的想知道为什么这是允许的.我为什么要这么做?这对我来说毫无意义.我的理由是,因为如果没有意义,为什么要允许呢?