数值型常量不应该被硬编码到源文件中。应该使用C预处理器的#define特性为常量赋予一个有意义的名字。符号化的常量可以让代码具有更好的可读性。在一处地方统一定义这些值也便于进行大型程序的管理,这样常量值可以在一个地方进行统一修改,只需修改define的值即可。枚举数据类型更适合声明一组具有离散值的变量,并且编译器还可以对其进行额外的类型检查。至少,任何硬编码的值常量必须具有一段注释,以说明该值的来历。
常量的定义应该与其使用是一致的;例如使用540.0作为一个浮点数,而不是使用540外加一个隐式的float类型转换。有些时候常量0和1被直接使用而没有用define进行定义。例如,一个for循环语句中用于标识数组下标的常量,
for (i = 0; i < ARYBOUND; i++)
上面代码是合理的,但下面代码
door_t *front_door = opens(door[i], 7);
if (front_door == 0)
error("can't open %s\\\\n", door[i]);
是不合理的。在最后的那个例子中,front_door是一个指针。当一个值是指针的时候,它应该与NULL比较而不是与0比较。NULL被定义在标准I/O库头文件stdio.h中,在一些新系统中它在stdlib.h中定义。即使像1或0这样的简单值,我们最好也用define定义成TRUE和FALSE定义后再使用(有些时候,使用YES和NO可读性更好)。
简单字符常量应该被定义成字面值,不应该使用数字。不鼓励使用非可见文本字符,因为它们是不可移植的。如果非可见文本字符十分必要,尤其是当它们在字符串中使用时,它们应该定义成三个八进制数字的转义字符(例如: '\007‘)而非一个字符。即使这样,这种用法也应该考虑其机器相关性,并按这里的方法处理。
网友评论