====== 行结束符(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语言}}