这篇来介绍一下C语言中的常量与预处理器.
1.C预处理器
本节内容在书4.3章.
1.1 定义
在Java中,有时候会使用到常量,比如Math类中的若干常量:
Math.PI
Math.E
......
然后还会自定义常量:
public static final int TIME = 60;
C语言中提供了一种机制,叫做"C预处理器".其实在前面的程序中我们已经见过了预处理器:
# include <stdio.h>
....
预处理器同样也可以用来定义常量:
# define 名字 值
# define PI 3.14159
与Java一样,推荐使用全部大写字母来命名常量.
需要注意的是,名字和值直接只是一个空格,不需要使用"=".
1.2 使用
使用方法很简单,只需在程序中调用即可.
# include <stdio.h>
# define PI 3.14159 //int型
# define PREFIX "你的名字是: " //字符串
int main(void) {
int r;
char name[64];
printf("请输入圆的半径:\n");
scanf("%d", &r);
printf("请输入你的姓名:\n");
scanf("%s", name);
printf("圆的周长为: %.2f\n", 2 * PI * r);
printf("%s%s\n", PREFIX, name);
return 0;
}
运行结果:
请输入圆的半径:
6
请输入你的姓名:
test
圆的周长为: 37.70
你的名字是: test
1.3 原理
在编译程序的过程中,所有上面代码中的"PI"和"PREFIX"都会被编译成对应的值,这一过程被称为"编译时替换"(76页).也就是说上面的程序在运行时实际上是这样的:
int main(void) {
int r;
char name[64];
printf("请输入圆的半径:\n");
scanf("%d", &r);
printf("请输入你的姓名:\n");
scanf("%s", name);
printf("圆的周长为: %.2f\n", 2 * 3.14159 * r);
// ↑ PI
printf("%s%s\n", "你的名字是: ", name);
// ↑ PREFIX
return 0;
}
2.const限定符
Java中有一个保留字但是并未被使用,叫做"const".在C语言中,这个关键字可以使用,约束"这个变量变为只读".
const MONTHS = 12;
3.明示常量
明示常量就是定义在头文件中的常量,引入常量所在的头文件就可以直接使用.
比如我在"mymath.h"中定义了PI,如果想要在程序中使用,那么引入"mymath.h"头文件就可以直接使用:
mymath.h:
# define PI 3.14
......
demo.c:
# include <mymath.h> //引入mymath.h
# include <stdio.h>
int main(void) {
printf("mymath.h中的PI = %.2f", PI);
return 0;
}
......