====== 行结束符(End-of-line) ====== 行结束符(End-of-line)用来标记C源程序中一行源代码的结束,跟在该结束符后的第一个字符被认作下一行的第一个字符。 可以通过反斜杆(\)将多个源代码行合并成一个逻辑行,合并时反斜杆和之后的行结束符被删除。 合并工作发生在三元组处理(Trigraph processing)和多字节字符序列到源字符集转化之后,预处理(Preprocessing)和词法分析(Lexical analysis)之前。 例如,如下的代码: if (a == b) x =1; el\ se x = 2; 等价于: if (a == b) x =1; else x = 2; \\ 上面提到了三元组,故附解释如下: === 三元组(Trigraph) === 有些国家和地区的字符集不足以囊括ASCII字符,故标准C引入三元组来表示如下的字符: ^ 三元组 ^ 代表字符 ^ | ??( | [ | | ??) | ] | | ??< | { | | ??> | } | | ??/ | \ | | ??! | %%|%% | | ??' | %%^%% | | ??- | ~ | | ??= | # | 只有上述9个三元组被识别,其他类似的字符组合不会被转化。 三元组字符的转化在词法分析(Lexical analysis)和识别字符(串)常量中的转义字符(Escape characters)之前进行。 如果一个字符序列刚好与三元组相同,要避免识别为三元组,要使用\转义其中的至少一个字符。如What?\?!,等于What??!。 要表示一个\,由于\本身是转义字符,需要两个\来表示,即??/??/。 === 替代符号(Alternative punctuators) === 与三元组类似,有些字符集中的操作符(Operator)和标点(Punctuator)也有替代形式: ^ 符号 ^ 代表符号 ^ | <% | { | | %> | } | | <: | [ | | :> | ] | | %: | # | | %:%: | ## | 与三元组不同在于,这些符号在字符(串)常量中不会被识别。 例如,下面的有点怪异的程序: #include int main(void) <% char str<:20:> = "Hello, World!"; printf("%s\n", str); %> 等价于: #include int main(void) { char str[20] = "Hello, World!"; printf("%s\n", str); } 实际应用中很少会碰到此类特殊符号,除非万不得已,一般不应该刻意使用它们。 {{tag>C语言}}