在 C/C++ 中使用字面常量时,有几个重要的注意事项需要考虑,以确保代码的准确性和可移植性。下面是一些关键要点:

  1. 整数字面量
  • 默认情况下,整数字面量是int类型。如果字面量的值超出了int的范围,它将被视为long intlong long int,这取决于它的值和编译器。
  • 可以在整数字面量后添加Ll后缀来明确指定它为long类型,或使用LLll后缀指定为long long类型。
  • 使用Uu后缀表示无符号类型,例如unsigned int
  1. 浮点数字面量
  • 默认情况下,浮点数字面量是double类型。
  • 使用Ff后缀可以指定字面量为float类型,而Ll后缀表示long double类型。
  1. 字符和字符串字面量
  • 字符字面量(如'a')是单引号括起来的单个字符,而字符串字面量(如"hello")是双引号括起来的字符序列。
  • 字符串字面量实际上代表了一个以null字符('\0')结尾的字符数组。
  1. 布尔字面量
  • C++(但不是 C)支持布尔字面量truefalse
  1. 转义序列
  • 在字符和字符串字面量中,可以使用转义序列(如'\n'表示换行,'\t'表示制表符)来表示无法直接在代码中出现的字符。
  1. 字面量的类型和大小
  • 需要注意字面量的类型和大小,以避免隐式类型转换导致的意外行为或数据丢失。
  1. 可移植性
  • 在不同的编译器和平台上,字面量的处理可能略有不同。为了编写可移植的代码,应明确指定字面量的类型,并避免使用依赖于特定平台行为的代码。
  1. 十六进制和八进制字面量
  • 十六进制字面量以0x0X开头,八进制字面量以0开头。

遵循这些注意事项可以写出更清晰、更可移植和更健壮的 C/C++ 代码。

更进一步地,可参见下列文章,详细介绍字面常量的使用要点:

  1.  转义字符的反斜杠不可误写成斜杠
  2.  在字符常量中用转义字符表示制表符和控制字符
  3.  在字符串常量中用转义字符表示制表符和控制字符
  4.  8 进制或 16 进制转义字符不应与其他字符连在一起
  5.  不应使用非标准转义字符
  6.  不应连接不同前缀的字符串常量
  7.  字符串常量中不应存在拼写错误
  8.  常量后缀由应由大写字母组成
  9.  无符号整数常量应具有后缀 U
  10.  不应使用非标准常量后缀
  11.  禁用 8 进制常量
  12.  小心遗漏逗号导致的非预期字符串连接
  13.  不应存在 magic number
  14.  不应存在 magic string
  15.  不应使用多字符常量
  16.  合理使用数字分隔符
  17.  不应使用宏定义常量
  18.  C 格式化字符串应为常量