代码:
int main(void)
{
auto a=1;
return 0;
}
当文件具有 .c 扩展名时,MS Visual Studio 2012 编译器可以正确编译该文件。我一直认为,当你使用.c扩展名时,编译应该按照C语法,而不是C++。此外,据我所知,没有类型的 auto 是允许的only自 C++11 以来的 C++ 中,这意味着类型是从初始值设定项推导出来的。
这是否意味着我的编译器不坚持使用 C,或者 C 语言的代码实际上是正确的?
auto
是一个古老的 C 关键字,意思是“本地范围”。auto a
是相同的auto int a
,并且因为局部作用域是函数内声明的变量的默认作用域,所以它也与int a
在这个例子中。
这个关键字实际上是 C 的前身 B 的遗留物,其中没有基本类型:一切都是int
, 指向int
, 数组int
.(*) 声明可以是auto
or extrn
[原文如此]。 C继承了“一切都是int
" 作为默认规则,因此您可以使用以下方式声明整数
auto a;
extern b;
static c;
ISO C 摆脱了这一点,但许多编译器仍然接受它以实现向后兼容性。如果它看起来不熟悉,那么您应该意识到相关规则正在发挥作用
unsigned d; // actually unsigned int
这在现代代码中仍然很常见。
C++11 重用了该关键字来进行类型推断,而很少有 C++ 程序员按照其原始含义使用该关键字。这基本上是安全的,因为“一切都是int
“C 的规则已在 C++98 中被删除;唯一破坏的是auto T a
,反正没人用过。 (在他的某个地方有关语言历史的论文 http://stroustrup.com/papers.html,Stroustrup 对此发表了评论,但我现在找不到确切的参考文献。)
(*) B 中的字符串处理很有趣:您可以使用以下数组int
并在每个成员中打包多个角色。 B实际上是BCPL https://en.wikipedia.org/wiki/BCPL具有不同的语法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)