1.4 符号常量
在永远不再讨论温度转换问题之前我们最后观察一下该程序。在程序中隐藏像300和20这样的“神奇数字”是一种坏的行为。它们向今后可能必须阅读该程序的人传达了很少的信息,并且它们很难以一种彻底的方式来改变。处理“神奇数字”的一种方式是给它们起一个有意义的名字,一行 #define 定义了一个代表某个特殊字符串的符号名称或者符号常量:
#define name replacement list
此后,任何 name 出现的地方(不包括在引号中的和另一个 name 中的组成部分)将会被对应的 replacement 文本所替换。name 和一个变量名称有着相同的形式:一个以字母开头的并且由字母和数字组成的序列。replacement 文本则可以是任何字符序列,并不局限于数字。
#include <stdio.h>
#define LOWER 0 /* lower limit of table */
#define UPPER 300 /* upper limit */
#define STEP 20 /* step size */
/* print Fahrenheit-Celsius table */
main()
{
int fahr;
for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
printf("%3d %6.1f/n", fahr, (5.0/9.0)*(fahr-32));
}
数量 LOWER、UPPER和STEP是符号常量,而不是变量,所以它们可以存在于声明中。习惯上符号常量写成大写形式,这样就可以从小写的变量名字中区分出它们。需要注意的是在 #define 的行末没有分号。