本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第1章,建议8,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
建议8:正确地选择变量的存储类型
在计算机中,保存变量当前值的存储单元有两类:一类是内存,另一类是CPU的寄存器。变量的存储类型关系到变量的存储位置,在C语言中,为变量提供了4种存储类型:auto(自动)型、static(静态)型、register(寄存器)型和extern(外部)型。它们关系到变量在内存中的存放位置,由此决定了变量的保留时间和变量的作用范围。
变量的保留时间又称为生存期,从时间的角度来看,可将变量分为静态存储和动态存储两种情况。静态存储是指变量存储在内存的静态存储区中,在编译时就为它分配了存储空间,在整个程序的运行期间,该变量占有固定的存储单元,程序执行结束后,这部分空间才会释放,变量的值在整个程序中始终存在;动态存储是指变量存储在内存的动态存储区中,在程序的运行过程中,只有当变量所在的函数被调用时,编译系统才临时为该变量分配一段内存单元,函数调用结束时,该变量空间就会释放,变量的值只在函数调用期存在。
变量的作用范围又称为作用域,从空间角度来看,可以将变量分为局部变量和全局变量。局部变量是在一个函数或复合语句内定义的变量,它仅在函数或复合语句内有效,编译时,编译系统不为局部变量分配内存单元,而是在程序运行过程中,当局部变量所在的函数被调用时,编译系统才会根据需要临时分配内存,调用结束后,释放空间;全局变量是在函数之外定义的变量,其作用范围为从定义处开始到本文件结束,编译时,编译系统会为其分配固定的内存单元,在程序运行的自始至终它都占用着固定的单元。