当你在编程时,有时你会希望某些变量的值保持不变。在C语言中,你可能将它们定义为常量。
你可以用几种不同的方式来定义C语言中的常量。在本教程中,你将学习如何使用#define 和const 修饰符来定义它们。
让我们开始吧:
在C语言中定义常量的常用方法之一是使用#define 预处理器指令,如下图所示。
#define <VAR_NAME> <VALUE>
在上面的语法中:
<VAR_NAME>是常量名称的占位符。- 建议你用大写字母命名常量,因为这有助于将它们与程序中定义的其他变量区分开来。
<VALUE>是一个占位符,表示 的值。<VAR_NAME>#define是一个预处理器指令。- 在程序编译之前,预处理器将所有出现的
<VAR_NAME>替换为<VALUE>。
在C语言中,预处理器在编译前处理源代码,以产生扩展的源代码。这一点在下文中有所说明。

C语言预处理程序
在你的程序中,在头文件之后加入所有常量的定义是一个好的做法,如下图所示:
#include <stdio.h>
#define CONSTANT_1 VALUE_1
#define CONSTANT_2 VALUE_2
//
int main()
{
//statements here
}
在下一节,你将看到一个使用#define 来声明C语言常量的例子。
如何使用#define 来声明常量的例子
考虑下面的代码片段,你有两个常量STUDENT_ID 和COURSE_CODE :
#include <stdio.h>
#define STUDENT_ID 27
#define COURSE_CODE 502
int main()
{
printf("Student ID: %d is taking the class %d\n", STUDENT_ID,COURSE_CODE);
return 0;
}
# Output
Student ID: 27 is taking the class 502
在这个例子中:
- 预处理程序将
STUDENT_ID和COURSE_CODE分别替换为 27 和 502。因此,main()函数的主体现在将是:
int main()
{
printf("Student ID: %d is taking the class %d\n", 27, 502);
return 0;
}
- 由于
printf()函数可以打印出格式化的字符串,格式指定符%d(用于十进制整数)的两次出现被替换为27和502。
尽管
#define让你定义常量,但你应该注意不要在程序的其他地方重新定义它们。
例如,下面的代码,你已经重新定义了STUDENT_ID 。而且它的编译和执行都不会出错:
#include <stdio.h>
#define STUDENT_ID 27
#define STUDENT_ID 207 //redefinition of a #define constant.
#define COURSE_CODE 502
int main()
{
printf("Student ID: %d is taking the class %d\n", STUDENT_ID,COURSE_CODE);
return 0;
}
根据你的编译器,你可能会得到一个警告:你试图重新定义一个已经定义的常量:

而最新的定义中的值将被使用。
请注意,重新定义的207 的值已经被用作STUDENT_ID ,覆盖了之前定义的值27 。

所以你现在知道#define 常数在某种意义上不是真正的常数,因为你可以随时重新定义它们。
继续下一节来学习const 修饰符。
如何使用const 修饰符来定义C语言中的常量
在C语言中,<data_type> <var_name> = <value> 是声明一个类型为<data_type> 的变量<var_name> ,并将其赋值为<value> 的语法。
要使<var_name> 成为一个常量,你只需要在这个语句中添加const 修饰符,如下所示:
const <data_type> <var_name> = <value>;
在变量的定义中加入
const关键字,可以确保其值在程序中保持不变。
const 修饰语使该变量成为只读。 试图在程序的其他地方修改它,在编译过程中会出现错误:
▶进入下一节,使用const 来修改前面的例子。
如何使用const 修饰符来声明常量 示例
在前面的例子中,你有常量STUDENT_ID 和COURSE_CODE 。现在你将使用const 修饰符将它们定义为常量:
- 由于它们都是整数,你可以将它们定义为
int数据类型,取预期值:27和502。 - 在各自的定义中包括限定词
const。
这在下面的代码片断中显示:
#include <stdio.h>
int main()
{
const int STUDENT_ID = 27;
const int COURSE_CODE = 502;
printf("Student ID: %d is taking the class %d\n", STUDENT_ID, COURSE_CODE);
return 0;
}
# Output
Student ID: 27 is taking the class 502
你可以看到,该代码按预期工作:
在C语言中,你不能重新定义一个已有的变量。
例如,如果int my_var = 2 是第一个定义,如果你试图将my_var 重新定义为int my_var = 3 ,你的程序将不能成功编译。
然而,你总是可以重新分配一个变量的值。
这意味着,如果int my_var = 2 是定义,你可以使用简单的赋值语句为my_var 赋予不同的值,如my_var = 3 。
现在让我们试着修改一下const 变量STUDENT_ID :
#include <stdio.h>
int main()
{
const int STUDENT_ID = 27;
STUDENT_ID = 207; // modifying a true constant: NOT POSSIBLE
const int COURSE_CODE = 502;
printf("Student ID: %d is taking the class %d\n", STUDENT_ID, COURSE_CODE);
return 0;
}
你会看到,程序没有编译成功。
而错误信息是:error: assignment of read-only variable 'student_id' ,意思是你只能读取STUDENT_ID 的值,而不能给它赋值。

因此,const 修饰符渲染了一个真正的常数,它对变化是免疫的,在程序执行过程中不能被改变。
总结
在本教程中,你已经学会了如何定义常数:
- 使用语法为
#define的预处理器指令#define <VAR_NAME> <VALUE>,以及 - 使用
const修饰符,使变量成为只读变量。
希望你觉得这个教程对你有帮助。编码愉快!😄