这些转换阶段的顺序由 ISO C 指定。
替换源文件中的每个三字符序列。ISO C 正好有九个为弥补不完善的字符集而单独构造的三字符序列,它们是命名 ISO 646-1983 字符集之外的字符的三字符序列:
表 6–1 三字符序列
三字符序列 |
转换为 |
---|---|
??= |
# |
??- |
~ |
??( |
[ |
??) |
] |
??! |
| |
??< |
{ |
??> |
} |
??/ |
\ |
??’ |
^ |
ISO C 编译器必定理解这些序列,但我们建议不要使用它们。在您使用 -xtransition 选项时,只要 ISO C 编译器在转换 (–Xt) 模式下替换三字母(甚至是在注释中),它就会向您发出警告。例如,考虑以下情形:
/* comment *??/ /* still comment? */ |
??/ 变为反斜杠。该字符和后面的换行符被删除。结果字符为:
/* comment */* still comment? */ |
第二行的第一个 / 是注释的结尾。下一个标记是 *。
删除每个反斜杠/换行符对。
源文件转换为预处理标记和白空间序列。每个注释有效地替换为一个空格字符。
处理各个预处理指令并替换所有宏调用。每个 #included 源文件在其内容替换指令行之前运行较早的阶段。
解释各个换码序列(形式为字符常量和文本字符串)。
串联相邻文本字符串。
各个预处理标记转换为常规标记,编译器正确分析这些标记并生成代码。
解析所有外部对象和函数引用,形成最终程序。