c中“auto”关键字的概念
能否请你在C程序中给出关键字“auto”的确切概念。
当我读完一本书“Deep C secrets”时,得到了以下引用。
auto关键字显然毫无用处。 它只对编译器 – 写入器在符号表中创建条目有意义 – 它表示此存储在进入块时自动分配(与全局静态分配或堆上的动态分配相反)。 Auto与其他程序员无关,因为默认情况下它是免费的。
auto
不是数据类型。 它是一个存储类说明符,就像static
一样。 当在局部变量上使用时,它基本上与static
相反,并指示变量的生命周期等于其范围(例如:当它超出范围时,它会自动销毁)。
您永远不需要指定auto
作为您允许使用它的唯一地方,它也是默认值。
它可能在C89中有用,你有一个隐式的int规则。
void f() { a = 0; // syntax error auto b = 0; // valid: parsed as declaration of b as an int }
但是,你可以直接写int
而不是auto
。 C99不再具有隐式int规则。 所以我不认为auto
有任何真正的目的。 它只是“默认的”存储说明符。
默认情况下,只要声明变量,就会获得auto
行为 – int i = 0;
但是,您通过显式指定不需要的auto int i = 0
来执行相同的操作。
因为所述auto
是C中函数作用域中变量的默认值。我对该关键字的唯一用法是在宏中。 对于执行变量声明的宏,您有时可能希望确保该变量未声明为static
或在文件范围内。 这里auto
关键字很方便。
这对于C ++特别有用,你可以滥用构造函数/析构函数机制来进行作用域绑定资源管理。 由于auto
关键字当前正在将其含义更改为C ++中完全不同的含义,因此不再可能使用此关键字。
我觉得这句话很值得怀疑。 编译器的逻辑级别与编译语言的逻辑级别无关,即使两种语言相同也是如此。 可能是我在幻想上很穷但我真的无法想象某个关键字是否对编译器有用而对一般程序有用; 特别是在“C”中,你不能直接操纵关键字或任何forms的代码而你必须反映数据的所有内容,因为在“C”中,代码和数据是两个完全不同的概念。
我的猜测是,auto最初是因为它不是可选的而是强制性的,后来当语言发展时,由于现有C代码的向后兼容性原因,它仍然不再存在。
假设我有一个函数返回某种复杂结构的复杂指针,或者,因为我正在开发一个可以返回不同结构的函数,我希望在C中有:
auto myautoptr = This_Function_that_returns_some_pointer_type();