====== 转义字符(Escape character) ====== 转义字符有两种形式:符号形式和数字形式。 符号形式的有如下几个: |\a |alert(e.g., bell) | 响铃 | |\b |backspace | 回退 | |\f |form feed | 换页 | |\n |newline | 换行 | |\r |carriage return | 回车 | |\t |horizontal tab | 横向制表符 | |\v |vertical tab | 纵向制表符 | |%%\\%% |backslash | 反斜杆 | |\' |single quote | 单引号 | |\" |double quote | 双引号 | |\? |question mark | 问号 | 其中,?主要用于三元组。双引号在字符常量中不需要使用反斜杆,单引号在字符串常量中不需要反斜杆。 数字形式的有八进制和十六进制。反斜杆后面直接跟的数字是八进制数,最多可以有三个数字。 十六进制是标准C引入的,在反斜杆后跟x,然后是十六进制数字,数量不限。 虽然如此,但标准C规定,数字形式的普通字符不能超过unsigned char的范围,数字形式的宽字符不能超过wchar_t的范围。 如在ASCII中,字符'a'的八进制形式为'\141',十六进制为'\x61'。 如果数字的值在[[.:execution_character_set|执行字符集]]中没有对应的字符,则结果依赖于实现(implementation-defined)。 除了以上三种转义形式,在反斜杆后出现其他形式的转义,其结果是未定义的(undefined)。 使用数字转义一定要小心,一方面它依赖于特定的字符集,从而导致可移植性问题。此外,不仔细的写法可能会出现不期望的结果。如: * "\0111"包含两个字符('\011'和'1')而不是一个,因为最多三个八进制数构成一个字符; * "\090"包含三个字符('\0','9'和'0'),因为9不是合法的八进制数; * "\xabc"只是一个字符,要表示两个字符,得写成:"\xab" "c"。 {{tag>C语言}}