当前位置:  开发笔记 > 编程语言 > 正文

C auto关键字在哪里使用?

如何解决《Cauto关键字在哪里使用?》经验,为你挑选了6个好方法。

在我的大学时代,我读到了auto关键词,随着时间的推移,我实际上忘记了它是什么.它被定义为:

将局部变量定义为具有本地生命周期

我从来没有发现它在任何地方都被使用过,它是否真的被使用过,如果是的话那么它在哪里被使用?在哪些情况下?



1> Jerry Coffin..:

如果您阅读了IAQ(不常见问题)列表,您就会知道auto主要用于定义或声明车辆:

auto my_car;

一直停在户外的车辆:

extern auto my_car;

对于那些缺乏幽默感并想要"只是事实女士"的人:简短的回答是根本没有任何理由可以使用auto.您唯一允许使用的auto是使用已具有auto存储类的变量,因此您只需指定可能发生的事情.尝试auto在任何没有auto存储类的变量上使用将导致编译器拒绝您的代码.我想如果你想获得技术,你的实现不必是编译器(但它是),理论上它可以在发出诊断后继续编译代码(但它不会).

卡兹的小附录:

还有:

static auto my_car;

这需要根据ISO C进行诊断.这是正确的,因为它声明汽车已经损坏.诊断是免费的,但关闭仪表板灯将花费你八十美元.(二十或更少,如果你从eBay购买自己的USB加密狗用于车载诊断).

上述内容extern auto my_car也需要诊断,因此除了负责停车执法的城市工作人员之外,它永远不会通过编译器运行.

如果您extern static auto ...在任何代码库中看到很多,那么您就是一个糟糕的社区; 在整个地方转向Rust之前,立即寻找更好的工作.


我口中没有咖啡,可乐,粗壮或其他深色液体,这是件好事.你欠我一个电脑屏幕,@ JerryCoffin就是这样的.最好的回答!
@Dan:老实说,你花了很长时间才读了5行文字,然后得到的部分是:"简短的回答是,根本没有任何理由使用汽车"?真的吗?鉴于紧接在你之前的评论,似乎至少有少数人认为这是积极的贡献.
我最近通过了一次严重的大火(关闭了两个车道),表明需要`char auto my_car;`

2> Mehrdad Afsh..:

auto是一个修饰语static.它定义变量的存储类.但是,由于局部变量的默认值是auto,您通常不需要手动指定它.

此页面列出了C中的不同存储类.


在有人投票给我的答案之后,再次看到这个.你说你"通常不需要手动指定它." 我只需要问:实际上是否存在可以指定`auto`*但不会默认发生的情况?

3> Kaz..:

auto关键字在C语言中无用.它存在,因为在C语言之前存在一种B语言,其中该关键字是声明局部变量所必需的.(B被发展为NB,后者成为C).

这是B的参考手册.

正如您所看到的,手册中充斥着使用的示例auto.这是因为没有int关键字.需要某种关键字的说:"这是一个变量的声明",而关键字也表明无论是本地或外部(autoextrn).如果您不使用其中一个,则会出现语法错误.也就是说,x, y;它本身不是一个声明,而是auto x, y;.

由于用B语言编写的代码库必须在开发语言时移植到NB和C语言,因此语言的新版本带来了一些包袱,以提高向后兼容性,从而减少了工作量.在这种情况下auto,程序员不必每次都追捕auto并删除它.

这是从手动的现在过时"隐式int"克鲁夫特在C(能够编写明显main() { ... }没有任何int前)也来自于B.这是另一个向后兼容功能,支持B码.函数没有在B中指定的返回类型,因为没有类型.一切都是一个词,就像许多汇编语言一样.

注意如何声明一个函数extrn putchar,然后唯一能使它成为标识符使用的函数:它在函数调用表达式中使用putchar(x),这就是告诉编译器将该无类型字视为函数指针.



4> Michael Burr..:

在C中auto是一个关键字,表示变量是块的本地变量.因为这是块作用域变量的默认,这是不必要的,很少使用(我不认为我见过它在讨论关键字文字使用的例子外).如果有人可以指出auto需要使用才能获得正确的解析或行为,我会感兴趣.

然而,在C++ 11标准的auto关键字已"劫持",以支持类型推断,其中变量的类型可以从它的初始值设定的类型来采取:

auto someVariable = 1.5;   // someVariable will have type double

添加类型推断主要是为了支持在模板中声明变量或从模板函数返回,其中基于模板参数的类型(或者在实例化模板时由编译器推导出来)通常可能非常痛苦地手动声明.



5> 小智..:

使用旧的Aztec C编译器,可以使用命令行开关将所有自动变量转换为静态变量(以提高寻址速度).

但是明确声明的变量auto在这种情况下保持原样.(必须为递归函数,否则将无法正常工作!)



6> Mikhail..:

auto关键字类似于Python中包含分号,它需要由以前的语言(B),但开发人员意识到这是多余的,因为大多数事情auto.

我怀疑它是留下来帮助从B到C的过渡.简而言之,一个用途是B语言的兼容性.

例如在B和80s C中:

/* The following function will print a non-negative number, n, to
   the base b, where 2<=b<=10.  This routine uses the fact that
   in the ASCII character set, the digits 0 to 9 have sequential
   code values.  */

printn(n, b) {
        extrn putchar;
        auto a;

        if (a = n / b)        /* assignment, not test for equality */
                printn(a, b); /* recursive */
        putchar(n % b + '0');
}

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有