一、什么是常量
程序运行时,其值不能改变的量,即为
常量
。
常量有以下几类:
- 字面常量(就是直接写出的数字,例如
3.14
)- #define定义的标识符常量
- const修饰的常变量
- 枚举常量
二、定义常量
1.使用宏定义
Ⅰ.什么是宏定义
在文件开头用 #define 来定义常量,也叫作“宏定义”。
宏定义,就是用一个标识符来表示一个常量值,如果在后面的代码中出现了该标识符,那么编译时就全部替换成指定的常量值。即用宏体替换所有宏名,简称宏替换
。
Ⅱ.定义格式
定义格式:
#define 符号常量名 常量值
- 符号常量名,称为
宏名
,属于标识符,一般定义时用大写字母表示。- 常量值,称为
宏体
,可以是数值常量,也可以是字符常量。
宏名用大写字母表示,与变量作区别(软性要求)
宏定义不是 C 语句,后面不能有分号
Ⅲ.实例
#include <stdio.h>
#define ZERO 0 //#define的标识符常量
int main() {
printf("zero = %d\n", ZERO);
return 0;
}
跟#include一样,“#”开头的语句都是“预处理语句”,在编译之前,预处理器会查找程序中所有的“ZERO”,并把它替换成0,这个过程称为预编译处理。然后将预处理的结果和源程序一起再进行编译处理得到目标代码 (OBJ文件)。
2.使用const限定符
C99中新的声明方式,这种方式跟定义一个变量是一样的,只需要在变量的数据类型前再加上一个const关键字,这被称为“限定符”。
格式:
const 数据类型 常量名 = 常量值;
例如:
const float PI = 3.14f; // 一旦创建就不能改变,所以必须初始化。
跟使用 #define定义宏常量相比,const定义的常量有详细的数据类型,而且会在编译阶段进行安全检查,在运行时才完成替换,所以会更加安全和方便。
3.使用枚举
枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读。 枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。
#include <stdio.h>
//使用enum定义枚举类
enum Sex{
//括号中的MALE,FEMALE,SECRET是枚举常量,因为我们没有赋值,默认是从0开始,依次向下递增1的
MALE, // 0
FEMALE, // 1
SECRET // 2
};
三、练习
这段代码的打印结果为________。
#include <stdio.h>
#define CANBERRA(x,y) ((x-y)/(x+y))
int main() {
printf("%lf", CANBERRA(1.0+2.0,0.0+2.0));
return 0;
}
答案:1.0
宏替换后为(1.0+2.0-0.0+2.0)/(1.0+2.0+0+2.0)=1.0;