全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com)
欢迎路过的YUAN类朋友相互交流,以下是我的联系方式:
Email:greyzhang@126.com
微信:grey0612
C语言中烦人变量命名冲突时会有怎么样的处理机制?学习过Python之后对此稍有疑惑。Python中直接说明一个变量是全局变量的方法在局部代码块中访问全局量,可是C语言中似乎没有直接的方法。我能够想到的处理方式只能是通过指针,对变量的操作全都通过指针来操作,你想要控制的变量灵活到不能再灵活。
在C语言中,当全局量与局部量或者形参重名时会有什么现象呢?背课本或者网络搜索的方法已经让我知道了答案,不过我还是想去尝试做一下看看。陆游的一句诗说得好,“纸上得来终觉浅,绝知此事要躬行”。还是写几行代码来做个小小的测试吧!
测试点:
- 全局变量与局部变量重名
- 全局变量与函数的形参重名
编写代码如下:
执行效果;
从运行效果中可以得到的结论非常明确,全局变量与局部变量或者形参重名在C语言中都不是什么问题。局部变量会在所能够作用的代码段内把全局量的效果“屏蔽”掉,至于形参,这只是一个形式上的东西,压根不会跟变量有什么冲突。
这虽不是什么语法上的问题或者功能上的问题,但是会给代码的维护带来一定的困难。至于运行结果是不是自己期待的,在单个函数功能调试的时候肯定也会带来很多的疑惑。
那MathWorks的PolySpace做个简单的检测看看有么有什么提示,检测结果如下:
Bug Finder:
检测到两个问题,提示信息都一样,提示两个相同的变量名但是有着不同的作用域。分别说的是局部变量与全局变量冲突,形参与全局变量冲突。
至于Code Prover的检测则是一路绿灯通过。这并不能拿来说明PolySPace的这两个模块有什么功能优劣的比较,两个是相互补充相辅相成的,测试的侧重点不同而已。不过,也看的出这检测工具的作用,能够把这种容易导致问题的问题点给挖掘出来。对于安全性要求比较高的软件行业,这显然是很有必要的。