C语言中有两种定义常量的方式:
define预处理器
使用#define预处理器可以定义常量,例如:
#define PI 3.14159
#define MAX_SIZE 100
#define MESSAGE "Hello World!"
在代码中使用时,编译器会进行文本替换,例如:
printf("%f\n", PI); // 将打印 3.14159
int arr[MAX_SIZE]; // 数组大小为100
printf("%s\n", MESSAGE); // 将打印 Hello World!
使用#define定义的常量有以下特点:
- 定义的是宏替换,并不会分配内存。
- 可以定义任意类型的常量,不仅限于基本类型。
- 替换时是文本替换,不会有类型检查。
- 可以通过#undef取消定义。
const关键字
使用const关键字也可以定义常量,例如: 使用const必须定义变量类型的常量,并在内存中分配空间,例如:
const float PI = 3.14159;
const int max_size = 100;
const char *message = "Hello World!";
编译器会对类型进行检查,例如:
PI = 3.14; //错误,不能修改常量
arr[max_size] = 10; //正确,max_size是整数常量
printf("%s", messgae); //错误,消息拼写错误
使用const定义的常量有以下特点:
- 在内存中分配空间,有明确的类型。
- 只能定义变量类型的常量。
- 编译时会进行类型检查。
- 不可以取消定义。
例子
#include <stdio.h>
#define PI 2 + 5
int main()
{
int c;
c = PI * 2;
printf("结果:%d", c); //结果:12
return 0;
}
由于常量PI是直接替换,结果是12
总结
const关键字方式有类型检查,更安全。但define的灵活性会更强。