拒绝全局变量与局部变量同名
大家都知道全局变量的作用范围是从声明开始到文件结束,而局部变量的作用范围一般是在函数内
从声明开始到函数结束.当函数内的局部变量与全局变量同名时,以局部变量为准.
也就是说,全局变量在函数内部不产生任何影响.换一种说,就是当局部变量与全局变量同名的函数内
部就不能引用全局变量,也就是函数内不能用到全局变量.这是很致命的.
当函数需要获得或者修改这个全局变量的值时,这样会使得程序无法做到.因此,我们必须注意到这方面的问题,不要以为是小事.
我在这里就介绍一下我个人的来预防全局变量与局部变量同名方法:
你可以这样做,也就是这样规定:全局变量一定以下划线开始,如_全局变量名;
而局部变量名的第一个符号不能是以下划线开始.这样明确规定就可以避免同名出现.
如果已经有了全局变量名与局部变量同名,那该怎么办:
1.当发现有局部变量与全局变量同名时,把局部变量改成其它变量名.
这种方法可以对于几十或者几百行的函数来说,改起来比较容易.但对于几千行的函数来说,
改起来并不是那么容易,有时可以会把其它的代码修改了.这种问题可能造成你无法察觉.(不太可取)
2.还有一种方法那就是修改全局变量,就要修改所有的用过这个全局变量的地方.
有时,其它文件也可能会用到,这样还要修改其它文件.这样改起来,工作量非常大.(更不可取)
3.可以在函数形参中多添加一个指针类型变量,用来指向这个全局变量.
这样用起来和修改起来都非常方便.(比较方便)如:
DataType Data;/*全局变量*/
Function(...,DataType* getDataPointer)/*添加形参*/
{...}
4.可以用另外一个函数,这个函数的返回值就是这个全局变量的指针.(比较好)
如:
DataType Data;/*全局变量*/
DataType* GetDataPointer(void)/*添加函数*/
{return &Data;}
以上的讲解,希望大家在今后的编程中注意这方面的问题.