【发布时间】:2014-06-17 20:14:49
【问题描述】:
代码:
int main(void)
{
auto a=1;
return 0;
}
当文件具有 .c 扩展名时,MS Visual Studio 2012 编译器编译时不会出错。我一直认为,当你使用 .c 扩展名时,编译应该按照 C 语法,而不是 C++。此外,据我所知,自 C++11 以来,仅在 C++ 中允许没有类型的 auto,这意味着类型是从初始化程序推导出来的。
这是否意味着我的编译器没有坚持使用 C,或者代码在 C 语言中实际上是正确的?
【问题讨论】:
-
要么使用 C++ 模式编译(可能),要么 MS 仍然停留在上个千年。隐式
int已于 1999 年从 C 标准中删除。 -
@JensGustedt MSVC++ 仅支持 C89(以及 C99 的一些功能)。它更像是一个 C++ 编译器。
-
@Brandin:使用 /Wall 选项会发出警告 C4431,表示缺少类型说明符并且 C 不再支持默认 int (请参阅 Jens 的评论)。这有点矛盾,因为显然这个编译器支持它......
-
@JensGustedt 以这种方式衡量,2012 年发布的 GCC 4.7(以及更高版本,我怀疑——我手头没有这些)也“停留在上个千年”。它在没有给出任何标志的情况下编译 OP 的代码,甚至没有通知。
-
@delnan,我至少假设 OP 已打开警告级别。我显然错了。从某种意义上说,这是真的,gcc 也仍然卡在那里,因为它们仍然没有 C99(或变体)作为默认值。即使没有标志,clang 也会对构造发出警告。