以圆周率π为例来说明。
# define PI 3.1415926
# include<stdio.h>
# include<math.h>
void main(){
double r=1.11,v /*r为半径,v代表圆球的体积*/
v=4.0/3.0*PI*pow(r,3);
printf("v=%f\n",v);
}
程序的第1行是用#define命令定义一个符号常量PI,使PI代表3.1415926即圆周率。这个PI就叫做符号常量,符号常量一般都使用大写字符表示。
#define不是C语句,所以改行的末尾没有分号。它是一个“预编译命令”。
在程序编译时,分成两个步骤:
(1)“预编译”。对所用预编译命令进行处理。如,根据#define命令,对程序中出现的所有的PI都用3.1415926代替。在预编译时,同样也对#include命令进行处理,把stdio.h头文件和math.h头文件的内容调出来,放在#include命令的位置,取代#include命令。
(2)“编译”。得到目标文件,后缀为obj。
不要把符号常量与变量混淆。符号常量只是一个符号,不占存储单元,它只是简单地进行字符置换,不论置换的字符是否有含义都进行置换。如果把PI定义如下:
#define PI 3@1415926
在预编译时,照样会把3@1415926取代PI,取代后如果不符合C语言的语法规定,则在编译时报错,预编译时并不会报错。
符号常量只是一个符号,不是变量,不能对其使用赋值运算,如下面的写法是错误的:
#define PI=3.14 /*错误,符号常量不能使用赋值运算符*/
也不能对符号常量指定类型,下面的写法是错误的:
#define double PI 3.1415926 /*错误,符号常量不能指定数据类型*/
还有一点要注意的是,如果一个字符串已经被定义为符号常量,则这个字符串不能再被声明为变量了,会报错。
使用符号常量的好处:
(1)含义清晰,增加程序的可读性。如PI,PRICE等含义清晰的字符,让人见名之意。
(2)“一改全改”,增加程序的可维护性。