1. 符号常量
在变量与常量那一节中,我们学习过一个叫做符号常量的知识点。
使用#define
指令,将一个值使用一个符号替代。
定义符号常量的公式:
#define 符号常量 值
我们用下面这个程序来计算买一件商品,两件商品,三件商品分别需要多少钱?
#include <stdio.h>
# define PRICE 3 // 商品的价格为3元
int main()
{
int num;
int total = 0;
// 买一件
num = 1;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
// 买两件
num = 2;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
// 买三件
num = 3;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
return 0;
}
若商品涨价为4元每件,仅需要修改符号常量PRICE
为4,整个程序中所有用到的PRICE
均变为4了。
#include <stdio.h>
# define PRICE 4 // 将商品的价格修改为4元
int main()
{
int num;
int total = 0;
// 买一件
num = 1;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
// 买两件
num = 2;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
// 买三件
num = 3;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
return 0;
}
现在,我们进一步了解#define
指令的具体工作细节。
2. 预处理指令
源代码中,以井号#
开头的并不是C语言中的语句。它们属于预处理指令。
在代码被编译前,预处理器会先处理预处理指令,并根据预处理指令的意义修改C语言源码。
修改后的代码将另存为中间文件或直接输入到编译器。并不会保存到源文件中。所以,请放心,预处理器不会改动你的源文件。
我们拿上面的代码来举例。预处理指令#define
定义了一个符号常量,它的值为3。
#include <stdio.h>
# define PRICE 3 // 商品的价格为3元
int main()
{
int num;
int total = 0;
// 买一件
num = 1;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
// 买两件
num = 2;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
// 买三件
num = 3;
total = num * PRICE;
printf("num:%d total:%d\n", num, total);
return 0;
}
预处理器将根据预处理指令的意义,将符号PRICE
替换为3。并且,删除代码中的预处理指令。
经过预处理后,代码将变为如下所示。编译器将会使用预处理后的代码进行编译。
#include <stdio.h>
int main()
{
int num;
int total = 0;
num = 1;
total = num * 3;
printf("num:%d total:%d\n", num, total);
num = 2;
total = num * 3;
printf("num:%d total:%d\n", num, total);
num = 3;
total = num * 3;
printf("num:%d total:%d\n", num, total);
return 0;
}