【发布时间】:2016-01-21 06:58:33
【问题描述】:
考虑以下程序(参见现场演示here)。
#include <stdio.h>
int main(void)
{
int ; // Missing variable name
puts("Surprise");
}
我的编译器 gcc 4.8.1 发出以下警告:
[警告]空声明中无用的类型名称[默认启用]
为什么编译得很好?我不应该得到编译器错误吗?当我将 g++ 4.8.1 编译为 C++ 程序时,会出现以下错误:
[Error] 声明没有声明任何东西 [-fpermissive]
【问题讨论】:
-
@Nawaz:语言规范有明确规定吗?
-
C++ 标准明确表示:“[dcl.dcl]/5 在simple-declaration 中,可选的 init-declarator-list 只有在声明一个类(第 9 条)或枚举(7.2)时才能省略,也就是说,当 decl-specifier-seq 包含一个 class-specifier、带有 class-key (9.1) 的 elaborated-type-specifier 或 enum-specifier。 "我对 C 标准不够熟悉,无法引用章节。
-
“产生警告”不是“编译正常”。
-
嗯,你可以同时定义多个本地人(
int a, b, c;),对吧?int ;看起来就像是同一事物的一个特例,声明了 0 个本地变量:D -
用
-Werror重新编译
标签: c++ c gcc language-lawyer variable-declaration