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的灵活性会更强。