gpt4 book ai didi

c - 为什么 auto a=1;用C编译?

转载 作者:太空狗 更新时间:2023-10-29 16:14:31 27 4
gpt4 key购买 nike

代码:

int main(void)
{
auto a=1;
return 0;
}

当文件具有 .c 扩展名时,MS Visual Studio 2012 编译器编译时没有错误。我一直认为当你使用 .c 扩展名时,编译应该根据 C 语法,而不是 C++。此外,据我所知,自 C++11 以来,在 C++ 中允许不带类型的 auto,这意味着类型是从初始化器推导出来的。

这是否意味着我的编译器没有坚持使用 C,或者代码在 C 语言中实际上是正确的?

最佳答案

auto 是一个旧的 C 关键字,意思是“本地范围”。 auto aauto int a 相同,并且由于局部作用域是函数内声明的变量的默认值,因此它也与 int a 在这个例子中。

这个关键字实际上是 C 的前身 B 的遗留物,那里没有基类型:一切都是 int,指向 int 的指针,int< 的数组.(*) 声明可以是 autoextrn [原文如此]。 C继承了“一切都是int”作为默认规则,所以你可以用

声明整数
auto a;
extern b;
static c;

ISO C 摆脱了这一点,但许多编译器仍然接受它以实现向后兼容性。如果它看起来不熟悉,那么你应该意识到相关规则在起作用

unsigned d;  // actually unsigned int

这在现代代码中仍然很常见。

C++11 为类型推断重用了这个关键字,如果有的话,很少有 C++ 程序员使用它的原始含义。这在很大程度上是安全的,因为来自 C 的“一切都是 int”规则已经在 C++98 中被删除了;唯一坏掉的是 auto T a,反正没人用过。 (在他的 papers on the history of the language 的某处,Stroustrup 对此发表了评论,但我现在找不到确切的引用资料。)

(*) B 中的字符串处理很有趣:您将使用 int 数组并在每个成员中打包多个字符。 B 实际上是 BCPL具有不同的语法。

关于c - 为什么 auto a=1;用C编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23406212/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com