C/C++ 字面常量的注意事项
在 C/C++ 中使用字面常量时,有几个重要的注意事项需要考虑,以确保代码的准确性和可移植性。下面是一些关键要点:
- 整数字面量:
- 默认情况下,整数字面量是
int类型。如果字面量的值超出了int的范围,它将被视为long int或long long int,这取决于它的值和编译器。 - 可以在整数字面量后添加
L或l后缀来明确指定它为long类型,或使用LL或ll后缀指定为long long类型。 - 使用
U或u后缀表示无符号类型,例如unsigned int。
- 默认情况下,整数字面量是
- 浮点数字面量:
- 默认情况下,浮点数字面量是
double类型。 - 使用
F或f后缀可以指定字面量为float类型,而L或l后缀表示long double类型。
- 默认情况下,浮点数字面量是
- 字符和字符串字面量:
- 字符字面量(如
'a')是单引号括起来的单个字符,而字符串字面量(如"hello")是双引号括起来的字符序列。 - 字符串字面量实际上代表了一个以null字符(
'\0')结尾的字符数组。
- 字符字面量(如
- 布尔字面量:
- C++(但不是 C)支持布尔字面量
true和false。
- C++(但不是 C)支持布尔字面量
- 转义序列:
- 在字符和字符串字面量中,可以使用转义序列(如
'\n'表示换行,'\t'表示制表符)来表示无法直接在代码中出现的字符。
- 在字符和字符串字面量中,可以使用转义序列(如
- 字面量的类型和大小:
- 需要注意字面量的类型和大小,以避免隐式类型转换导致的意外行为或数据丢失。
- 可移植性:
- 在不同的编译器和平台上,字面量的处理可能略有不同。为了编写可移植的代码,应明确指定字面量的类型,并避免使用依赖于特定平台行为的代码。
- 十六进制和八进制字面量:
- 十六进制字面量以
0x或0X开头,八进制字面量以0开头。
- 十六进制字面量以
遵循这些注意事项可以写出更清晰、更可移植和更健壮的 C/C++ 代码。
更进一步地,可参见下列文章,详细介绍字面常量的使用要点:
- 转义字符的反斜杠不可误写成斜杠
- 在字符常量中用转义字符表示制表符和控制字符
- 在字符串常量中用转义字符表示制表符和控制字符
- 8 进制或 16 进制转义字符不应与其他字符连在一起
- 不应使用非标准转义字符
- 不应连接不同前缀的字符串常量
- 字符串常量中不应存在拼写错误
- 常量后缀由应由大写字母组成
- 无符号整数常量应具有后缀 U
- 不应使用非标准常量后缀
- 禁用 8 进制常量
- 小心遗漏逗号导致的非预期字符串连接
- 不应存在 magic number
- 不应存在 magic string
- 不应使用多字符常量
- 合理使用数字分隔符
- 不应使用宏定义常量
- C 格式化字符串应为常量

浙公网安备 33010602011771号