Are the stages of compilation of a C++ program specified by the standard?
If so, what are they?
If not, an answer for a widely-used compiler (I'd prefer MSVS) would be great.
I'm talking about preprocessing, tokenization, parsing and such. What is the order in which they are executed and what do they do in particular?
EDIT: I know what compilation, linking and preprocessing do, I'm mostly interested in the others and the order. Explanations for these are, of course, also welcomed since I might not be the only one interested in an answer.
Yes and no.
The C++ standard defines 9 "phases of translation". Quoting from the N3242 draft (10MB PDF), dated 2011-02-28 (prior to the release of the official C++11 standard), section 2.2:
As indicated by the [SNIP] markers, I haven't quoted the entire section, just enough to get the idea across.
To emphasize, compilers are not required to follow this exact model, as long as the final result is as if they did.
Phases 1-6 correspond more or less to the preprocessor, 7 to what you might normally think of as compilation, 8 deals with templates, and 9 corresponds to linking.
(C's translation phases are similar, but #8 is omitted.)