在 C 语言中,常量指的是值一个不能改变的量。也就是说,常量的值从定义开始就是固定的,一直到程序结束都不会改变。
常量,形象来说就像千百年来约定俗成的名称。这个名称是定下来的,而不能随便改变。比如我们都叫做 “人”,总不能把你叫做 “猪”,对吧?
C 常量语法
在C 语言中,如果想要定义一个常量,我们有 2 种实现方式:① 使用 const 关键字; ② 使用 #define 命令。
语法:
// 方式1
const 类型 常量名=值;
// 方式2
#define 常量名 值说明:
#define 是一条预处理命令,也叫做 “宏定义命令”。在 C 语言中,预处理命令都是以 “#” 开头的。实际上,我们之前接触的 #include <stdio.h> 也是一条预处理命令。
在 C 语言中,常量一般有着特殊用途,所以命名时一般都是全部使用大写字母。当然我们使用小写字母或其他变量名也是可以的,只是说并不推荐这样去做而已。
注意:
- 使用 const 关键字定义的常量具有特定的数据类型,而使用 #define 定义的常量本质上是在预处理阶段进行文本替换,没有类型信息。
- const 常量通常具有局部作用域(在声明它的代码块内有效),而 #define 定义的常量作用域更广,从定义处开始到文件结束。
C 常量示例
接下来,我们通过几个简单的例子来讲解一下 C 语言常量是如何使用的。
示例 1:使用 const 定义 C 常量
#include <stdio.h>
int main(void)
{
const int YEAR = 2030;
printf("%d", YEAR);
return 0;
}运行结果如下。
2030分析:
常量和变量不一样,变量的值是可以被修改的,但常量的值是不允许修改的(要不然怎么叫常量呢,对吧)。如果我们尝试去修改一个常量的值,那么编译时就会报错。
#include <stdio.h>
int main(void)
{
const int YEAR = 2030;
YEAR = 2077; // 尝试将 YEAR 的值修改成 2077,则编译报错
printf("%d", YEAR);
return 0;
}示例 2:使用 #define 定义 C 常量
#include <stdio.h>
#define YEAR 2030 // 注意,末尾处是没有分号的
int main(void)
{
printf("%d", YEAR);
return 0;
}运行结果如下。
2030分析:
凡是预处理命令,末尾处一定不要加上分号,否则就会报错。这是因为 #define 实现的是文本替换,如果你写成 #define YEAR 2030;(带分号),那么代码里的 printf("%d", YEAR); 会被替换成 printf("%d", 2030;);。这样会在编译阶段导致语法错误(因为括号里多了一个分号)。
对于上面例子来说,在编译之前,预处理器会将代码中所有出现的 YEAR 替换为 2030。
注意: 如果想要定义一个 C 常量,我们更推荐使用 const 来定义,而不是使用 #define 来定义。这是因为 const 定义的变量是有类型的,编译时可以进行类型检查。
