As of the C 2011 Standard, listed in §5.1.1.2 Translation Phases, the translation of source code to program image (e.g., the executable) are listed to occur in 8 ordered steps.

  1. The source file input is mapped to the source character set (if necessary). Trigraphs are replaced in this step.
  2. Continuation lines (lines that end with \\\\) are spliced with the next line.
  3. The source code is parsed into whitespace and preprocessing tokens.
  4. The preprocessor is applied, which executes directives, expands macros, and applies pragmas. Each source file pulled in by #include undergoes translation phases 1 through 4 (recursively if necessary). All preprocessor related directives are then deleted.
  5. Source character set values in character constants and string literals are mapped to the execution character set.
  6. String literals adjacent to each other are concatenated.
  7. The source code is parsed into tokens, which comprise the translation unit.
  8. External references are resolved, and the program image is formed.

An implementation of a C compiler may combine several steps together, but the resulting image must still behave as if the above steps had occurred separately in the order listed above.