C 语言 - 常量
在 C 语言中,常量(Constants)是指程序在执行过程中不能改变的固定值。这些固定值也称为字面量(Literals)。常量可以是任何基本数据类型,例如整数常量、浮点常量、字符常量或字符串文字,以及枚举常量。
在使用时,常量可以直接在代码中使用,也可以通过定义常量来使用。通过定义创建的常量,其处理方式与变量基本一样,只是它们的值在定义后不能修改,换句话说,常量是只读的。
定义常量的方式
C 语言定义常量的方式有两种,一是使用 #define
宏定义,二是使用 const
关键字。
使用 #define 宏定义
使用 #define
可以在 C 程序中定义一个常量,#define
是一个预处理指令,也称为“宏定义”,因此它会在编译时被替换为其对应的值。
使用 #define
预处理器定义常量的语法如下:
#define identifier value
例如,下面代码定义了一个名为 PI(圆周率)的常量:
#define PI 3.1415926
注意:#define
宏定义末尾不需要添加分号 ;
。
使用 const 关键字
在定义变量时,使用 const
关键字可将其声明为只读变量,即常量,此后该变量的值在其生命周期将不能修改。
使用 const
关键字定义常量的语法如下:
const type variable = value;
例如 ,下面代码定义了一个名为 MAX_VALUE 的常量:
const int MAX_VALUE = 100;
值得一提的是,使用 const
定义常量时,必须在定义的时候初始化,因为常量不允许重新赋值。例如,下面的写法是错误的。
const int MAX_VALUE;
MAX_VALUE = 200;
整数常量
整数常量(Integer Literals)可以是十进制、十六进制、八进制或二进制的常量,默认为十进制整数,可通过前缀指定基数。例如,0x
或 0X
表示十六进制,0
表示八进制,0b
或 0B
表示二进制。不过,需要注意的是,并不是所有的 C 编译器都支持二进制数字,只有一部分编译器支持,并且和编译器的版本有关系。
下面列举几个不同进制的整数常量的例子:
256 /* decimal */
0567 /* octal */
0x4F /* hexadecimal */
0b1010 /* binary */
注意:不同进制的数字不能超过其进制限制,比如十六进制的数字范围是 0-9 以及 A-F,二进制数字只能是 0 和 1,否则会报错。例如 0b1002
、0855
都是不允许的。
另外,整数常量也可以带一个后缀,后缀是 U
和 L
的组合(可单独使用)。其中,U
表示无符号整数(unsigned),L
表示长整数(long)。后缀可以是大写,也可以是小写,其顺序任意。例如:
30 /* int */
30U /* unsigned int */
30L /* long */
30UL /* unsigned long */
通常,在使用 #define
定义整数常量时,如果这个整数很大,或者可能会参与很大的运算,那么建议加上后缀 L
防止数据溢出。例如:
#define SECONDS_PER_YEAR 31556926UL
浮点常量
浮点常量(Floating-point Literals)由整数部分、小数点、小数部分和指数部分组成。你可以使用小数形式或者指数形式来表示浮点常量。
- 当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。