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