常量
概念说明
常量表示在程序中不希望被修改的固定值。
在 C 语言里,常量既可以是直接写在代码中的字面量,也可以通过 const、enum 或 #define 给它们起一个有语义的名字。
常量最重要的价值不是“语法更高级”,而是让代码更清楚。
例如把 3.1415926 写成 PI,把 86400 写成 SECONDS_PER_DAY,代码含义会直观很多。
另外,很多初学者只把常量理解成数字。 其实字符常量、字符串字面量、十六进制字面量、转义字符和浮点字面量,都是常量世界的一部分。
语法/规则
- 数字、字符、字符串本身都是字面量,例如
100、'A'、"hello"。 - 十进制、八进制和十六进制整数字面量都很常见,例如
26、032、0x1A。 - 字符和字符串里可以使用转义字符,例如
\n、\t、\\、\"、\0。 const用来声明只读对象,例如const int max_users = 100;。#define会在预处理阶段进行文本替换,例如#define PI 3.14159。- 宏常量没有类型,
const对象有类型;在调试、类型检查和作用域表现上两者并不相同。 - 相邻的字符串字面量会自动拼接,这在书写较长提示文本时很实用。
示例
| |
输出结果:
| |
语法补充
长字符串可以通过相邻字面量自动拼接,写法如下:
| |
这种写法比手动在每一行里加入很多转义符更易读。
常见错误
- 以为
const对象和宏常量完全一样,忽略了它们在类型检查和调试上的区别。 - 直接修改
const变量,或者通过不安全方式强行改写只读数据。 - 忽略前导
0的含义,把八进制字面量误写成了十进制。 - 把大量业务含义不明的数字直接写进代码里,形成难以维护的魔法数字。
- 忘记转义字符会真正影响字符串内容,例如
\n会换行、\0会终止字符串。