====== 字符常量(Character constant) ====== 字符常量由单引号(')包含的一个或多个字符构成。标准C允许使用前缀L来表示宽字符常量。 常量中可以使用反斜杆(\)实现转义。如果常量中要包含单引号(')和反斜杆(\),则需要转义。 **没有前缀L的字符常量的类型是int**,所以sizeof('A')=sizeof(int),常量的值是[[.:execution_character_set|执行字符集]]中相应字符的数字编码,由char类型整提升为int类型后的结果。例如,如果char为8bit的有符号类型,则常量'\377'经过符号扩展后得到的int值为-1。 带前缀L的字符常量类型为wchar_t。 当出现下面几种情况时,字符常量的值依赖于实现(implementation-defined): * 在执行字符集中没有对应的字符; * 常量中包含多个执行字符集中的字符; * 数字转义常量在执行字符集中无法表示。 使用包含多个字符的字符常量是不可移植的(依赖于实现),有的实现不允许这么做,有些实现则将其转化为对应字节数的整型常量。但即使这样,由于各个系统的字节序(byte ordering)的不同,获得的整型常量的值也是不同的。 例如,常量'ABCD'(以ASCII字符集为例)的值可能为0x41424344(left-to-right packing),也可能为0x44434241(right-to-left packing)。 所以,不建议在程序中使用这种字符常量。 {{tag>C语言}}