computer:c:tips:end_of_line
行结束符(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 <stdio.h> int main(void) <% char str<:20:> = "Hello, World!"; printf("%s\n", str); %>
等价于:
#include <stdio.h> int main(void) { char str[20] = "Hello, World!"; printf("%s\n", str); }
实际应用中很少会碰到此类特殊符号,除非万不得已,一般不应该刻意使用它们。
computer/c/tips/end_of_line.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1