绝大多数书里都说,定义时带auto前缀的都是局部变量。这是错误的。C没有全局变量,所有的C标准都没有定义过全局变量。你希望在你的C程序里有全局变量,那你必须自己做出来。参见我的条文《如何在C里定义一个全局变量?》。因此,C里的变量都是局部变量。
auto的词义就是自动,不知道为啥要翻译成局部?函数内的变量,包括函数的参数,只要没加static前缀,都是自动变量。这自动是啥意思呢?进函数时就出现,出函数时就消失。所以叫auto变量。函数的调用,是在栈上进行的。调用时,就往栈里压入该函数的参数和auto变量,调用结束返回时弹出废弃。
与上次说的register关键字一样,auto也是存储类关键字。auto是默认的,一般都不写。但是,不管你写auto还是不写,你都得弄清楚auto是什么意思?它对代码有什么意义?
再重复一遍,C语言变量都是局部的,函数内变量、函数参数、函数外变量,都是局部变量。C的伟大就在这里,它是第一个结构化程序设计语言,可它已经把结构化做到了极致。
下次说说第三个存储类关键字static。