11-2. 预处理指令

  • 学习人数 30K+
  • 适合所有人群学习
avatar
林耿亮

你好编程主讲老师

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;
}