代码:

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

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

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

推荐答案

auto是一个古老的C关键字,意思是"局部范围".auto aauto int a相同,因为局部作用域是函数中声明的变量的默认值,所以在本例中它与int a相同.

这个关键字实际上是C的前一个B的遗留,B中没有基类型:一切都是int,指针指向int,数组为int.(*)声明将是autoextrn[sic].C继承了"everything is int"作为默认规则,因此可以使用

auto a;
extern b;
static c;

ISO Cgo 掉了这一点,但许多编译器仍然接受它以实现向后兼容.如果它看起来很陌生,那么您应该意识到有一个相关的规则在

unsigned d;  // actually unsigned int

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

C++11重用了关键字进行类型推断,几乎没有C++程序员使用该关键字的原始含义.这在很大程度上是安全的,因为C中的"一切都是int"规则在C++98中已经被删除了;唯一打破的是auto T a,反正没有人在使用它.(在他的papers on the history of the language篇文章中,Stroustrup对此发表了 comments ,但我现在找不到确切的参考资料.)

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

C++相关问答推荐

XV 6中的MLFQ和RR

va_arg -Linux和Windows上的不同行为

为什么在C中二维字符数组会有这样的行为?

ZED for SDL上的C语言服务器

以前版本的tty_ldisc_ops.ioctl()是否也需要文件参数?

为什么GDB/MI进程的FIFO循环中有read()阻塞

当输入负数时,排序算法存在问题

为什么该函数不将参数值保存到数据 struct 中?

GTK3按钮信号错误

从uint8_t*转换为char*可接受

什么是.c.h文件?

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

在txt文件中找到指定的字符串,并从数字中减go 相同的值

添加函数会 destruct 嵌入式C代码(无IDE)

C将数组传递给函数以修改数组

为什么WcrTomb只支持ASCII?

如何在C宏定义中包含双引号?

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

变量值不正确的问题

程序打印一些随机空行