C 编程中编译阶段和翻译阶段之间的关系是什么?我们可以根据编译阶段对翻译阶段进行分类吗?谁能解释一下这个吗?
C 标准定义了翻译的八个阶段:
物理源多字节字符和三字符序列映射到源字符集的字符。
每个反斜杠后跟换行符都会被删除(将两行拼接在一起)。
源字符被分组为预处理标记,每个空白字符序列都被一个空格替换,但保留换行符。
执行预处理指令和_Pragma运算符,并扩展宏调用。
字符串中的源字符和字符常量被转换为执行字符集。
相邻的字符串文字被连接起来。
每个预处理标记都会转换为语法标记,并且丢弃由空格字符分隔的标记。对生成的令牌进行分析和翻译(编译)。
所有外部引用均已解析(程序已链接)。
阶段 1 至 6 通常被视为初步或“预处理”。编译的实质性工作在第 7 阶段,“对生成的令牌进行分析和翻译(编译)。”