1.
Physical source file multibyte
characters are mapped, in an implementation-defined manner, to the source
character set (introducing new-line characters for end-of-line indicators) if necessary.
Trigraph sequences are replaced by corresponding single-character internal
representations.
将源文件中多字节字符映射成编译器定义的单字节字符
2.
Each instance of a backslash
character (/) immediately followed by a new-line character is deleted, splicing
physical source lines to form logical source lines. Only the last backslash on
any physical source line shall be eligible for being part of such a splice. A
source file that is not empty shall end in a new-line character, which shall not
be immediately preceded by a backslash character before any such splicing takes
place.
将行末的反斜杠(‘/’)及新行符去掉,然后将实际行连接成逻辑意义上的行
3.
The source file is decomposed
into preprocessing tokens and sequences of white-space characters (including
comments). A source file shall not end in a partial preprocessing token or in a
partial comment. Each comment is replaced by one space character. New-line
characters are retained. Whether each nonempty sequence of white-space
characters other than new-line is retained or replaced by one space character
is implementation-defined.
将注释用一个空白符号代替,出了新行符之外的空白符号按编译器定义的方法处理(比如全部用一个空白符号代替)
4.
Preprocessing directives are
executed, macro invocations are expanded, and _Pragma unary operator
expressions are executed. If a character sequence that matches the syntax of a
universal character name is produced by token concatenation (6.10.3.3), the
behavior is undefined. A #include preprocessing directive causes the named
header or source file to be processed from phase 1 through phase 4, recursively.
All preprocessing directives are then deleted.
执行预处理指令,展开宏调用,执行_Pragma表达式,并对#include所引用的头文件或源文件进行1-4步的递归处理,之后删掉所有预处理指令。
5.
Each source character set
member and escape sequence in character constants and string literals is
converted to the corresponding member of the execution character set; if there
is no corresponding member, it is converted to an implementation-defined member
other than the null (wide) character.
将源字符集成员、转义序列和字符字面量转换成对应的执行字符集成员,若没有对应成员则转换成编译器定义的非空字符。
6.
Adjacent string literal tokens
are concatenated
连接字符串字面量
7.
White-space characters separating
tokens are no longer significant. Each preprocessing token is converted into a
token. The resulting tokens are syntactically and semantically analyzed and
translated as a translation unit.
隔开记号的空白字符被忽略,每个预处理记号被转换成记号,最后将所有记号依据语法和语义编译成一个编译单元
8.
All external object and
function references are resolved. Library components are linked to satisfy
external references to functions and objects not defined in the current
translation. All such translator output is collected into a program image which
contains information needed for execution in its execution environment
处理全局对象及函数调用,若编译时还未定义外部引用,编译器的输出将被一个包含了当前执行环境下所需的执行信息的程序映像所收集。