c语言局部变量应该注意什么?

去年我们部门在17届大学生在转正述职答辩时,有位同学(同事)被领导提出一个问题:“c语言局部变量应该注意什么?”
当时我的第一反应就是,static静态变量,命名与全局变量避免冲突。我记得那位同学说的是注意内存,今天突然想到这个问题,我就把知道的都写出来了(欢迎大家在下面进行修正和补充)。
局部变量我的理解就是函数体内就是局部变量,函数体外就是全局变量。
一、首先是注意命名规则
命名规则我第一个想到的就是《华为编程规范》,我刚入职的时候,公司的代码测评人员还特地交代过,很多公司都是按照这个来的。
规范示例:

int liv_Width

其变量名解释如下:
l:局部变量(Local)(其它:g 全局变量(Global))
i : 数据类型(Interger)
v 变量(Variable)(其它:c 常量(Const)…)
Width 变量含义
这么做的方法好处之一就是避免了与全局变量混淆,不过我觉得这个不适合模块化思想,我看了一些linux源码和uboot源码,局部变量大部分还是命名为"变量含义”+“_”+“模块名(或函数名)”

二、static和内存
static局部变量是要和内存一起说的:
普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配(malloc),但是记得使用完这个堆空间后要释放之。
在栈空间上分配时是要注意内存的,不能分配内存过大。如果栈内空间小于所申请的空间大小,那么这时系统将揭示栈溢出,并给出相应的异常 信息 。但是堆不一样,堆可分配空间是很大的。
static局部变量中文名叫静态局部变量。普通局部变量是在动态存储区的(堆栈区),但是静态局部变量是在静态存储区的(和全局变量在一个地方,可以当全局变量使用)
它与普通的局部变量比起来有如下几个区别:
1)位置:静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在(定义时出生,随着程序结束而结束)。
2)访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。
3)值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。

猜你喜欢

转载自blog.csdn.net/qq_32166779/article/details/84026669
今日推荐