程序运行过程中始终不变的数学常量称为参数,做算法的代码会有特别多的参数,要怎么放置这些参数呢?
综合来说编译期参数没有特别完美的存放方案,标清楚全局变量后,(例如用g_前缀)全局变量的方案算是最好的。
【扩展】这时候体现了C++的强大的地方了,C++可以直接在类中定义常量,算是完美解决方案。
全局变量是被提倡尽量少用的,因为全局变量几乎没有作用于限制,代码阅读者无法很快知道该变量生命周期里发生了什么事件,从而无法很快理解代码的逻辑。
但是这并不意味着全局变量完全没有用处,它至少有以下几点用处,注意使用的时候加上“g_”前缀:
程序的参数往往使用静态常量表格来存储,具体原因参见 C语言算法中的数学参数放在哪里? 。
调试系统是反封装的,(想象一个实验机器插满了各种调试线路、管道),调试系统往往需要获取某些很深的函数内部的某些中间变量,如果通过传参获取,那么 (1)函数参数就会很多,很破坏阅读,一个函数10个参数,其中8个是调试参数 (2)调试系统需要查看的变量集可能会经常变化,层层递归修改函数形参会耗费大量时间。
这种情况通常出现在两个第三方库之间有命名冲突,例如都存在某一些数学函数。 注释方法:
用“hack”这个词非常好,既能够表达出这是对原有模块的破坏,一眼就能看出hack了那些地方,原来是什么代码,另外也很容易搜索。