本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第1章,建议8-1,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
建议8-1:定义局部变量时应该省略auto关键字
在默认情况下,所有的局部变量都是auto型的变量(也称为自动变量),而且会为这些变量动态分配存储空间,数据则存储在动态存储区中。因此,它的生存期比较短暂:当调用函数时,系统为该函数的自动变量分配内存,等程序从该函数返回,即调用过程结束时,系统就会释放所有该函数的自动变量。这个过程是通过一个堆栈机制实现的,为自动变量分配内存就压栈,当函数返回时则退栈。
需要说明的是,既然自动变量就是指在函数内部定义使用的变量(局部变量),那么也就只允许在定义它的函数内部使用它,在函数外的其他任何地方都不能使用该变量。当然,这也充分说明自动变量没有链接性,因为它不允许其他的文件进行访问。因此,这也就允许我们在这个函数以外的其他任何地方或其他的函数内部定义同名的变量,并且它们之间不会发生任何冲突。虽然这种变量的命名方式不是我们所推荐的,但却是C语言所允许的。
来看一个自动变量的定义示例:
int main(void)
{
/*定义整型变量x为自动变量*/
auto int x=0;
/*定义整型变量y,缺省存储类型时为自动变量*/
int y=0;
......
}
在上面的代码中,默认情况下,所有的局部变量都是自动变量,所以说变量x与变量y一样,都是自动变量。因此,我们在声明局部变量时,应该省略auto关键字。