C 语言常量与字面量完全指南:类型、用法与最佳实践
常量指程序执行期间不得修改的固定值,也称为 字面量。
常量可以是基本数据类型中的任意一种:整数常量、浮点常量、字符常量、字符串字面量。也有枚举常量。
常量像普通变量一样处理,只是定义后值不能修改。
整数字面量
整数字面量可以是十进制、八进制或十六进制常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,无前缀表示十进制。
整数字面量也可以有后缀,由 U 和 L 组合表示 unsigned 和 long。后缀大小写不敏感,顺序任意。
整数字面量示例:
212 /* 合法 */ 215u /* 合法 */ 0xFeeL /* 合法 */ 078 /* 非法:8 非八进制数字 */ 032UU /* 非法:不能重复后缀 */
其他各类整数字面量示例:
85 /* 十进制 */ 0213 /* 八进制 */ 0x4b /* 十六进制 */ 30 /* int */ 30u /* unsigned int */ 30l /* long */ 30ul /* unsigned long */
浮点字面量
浮点字面量包含整数部分、小数点、小数部分、指数部分。可用十进制或指数形式表示。
十进制形式必须包含小数点、指数或两者;指数形式必须包含整数部分、小数部分或两者。有符号指数用 e 或 E 引入。
浮点字面量示例:
3.14159 /* 合法 */ 314159E-5L /* 合法 */ 510E /* 非法:指数不完整 */ 210f /* 非法:无小数点或指数 */ .e55 /* 非法:缺少整数或小数部分 */
字符常量
字符字面量用单引号括起,如 'x' 可存入 char 类型简单变量。
字符字面量可以是普通字符(如 'x')、转义序列(如 '\t')或通用字符(如 '\u02C0')。
C 中某些字符前加反斜杠有特殊含义,如换行 (\n)、制表 (\t)。
- 转义序列代码列表:
演示几个转义序列字符的示例:
在线演示#include <stdio.h>
int main() {
printf("Hello\tWorld\n\n");
return 0;
}
编译执行产生以下结果:
Hello World
字符串字面量
字符串字面量用双引号 "" 括起。字符串包含类似字符字面量的字符:普通字符、转义序列、通用字符。
可用字符串字面量将长行拆分为多行,用空白分隔。
字符串字面量示例,三种形式完全相同:
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
定义常量
C 语言定义常量有两种简单方式:
使用 #define 预处理器。
使用 const 关键字。
#define 预处理器
使用 #define 定义常量的形式:
#define identifier value
详细示例:
在线演示#include <stdio.h>
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main() {
int area;
area = LENGTH * WIDTH;
printf("area 的值 : %d", area);
printf("%c", NEWLINE);
return 0;
}
编译执行产生以下结果:
area 的值 : 50
const 关键字
可用 const 前缀声明带特定类型的常量:
const type variable = value;
详细示例:
在线演示#include <stdio.h>
int main() {
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
printf("area 的值 : %d", area);
printf("%c", NEWLINE);
return 0;
}
编译执行产生以下结果:
area 的值 : 50
注意:良好编程习惯是用大写字母定义常量。
C语言