-C Do not discard comments. All comments are passed through to the output file, except for comments in
processed directives, which are deleted along with the directive.
You should be prepared for side effects when using -C; it causes the preprocessor to treat comments
as tokens in their own right. For example, comments appearing at the start of what would be a
directive line have the effect of turning that line into an ordinary source line, since the first
token on the line is no longer a #.
-CC Do not discard comments, including during macro expansion. This is like -C, except that comments
contained within macros are also passed through to the output file where the macro is expanded.
In addition to the side-effects of the -C option, the -CC option causes all C++-style comments inside
a macro to be converted to C-style comments. This is to prevent later use of that macro from
inadvertently commenting out the remainder of the source line.
The -CC option is generally used to support lint comments.
Indicate to the preprocessor that the input file has already been preprocessed. This suppresses
things like macro expansion, trigraph conversion, escaped newline splicing, and processing of most
directives. The preprocessor still recognizes and removes comments, so that you can pass a file
preprocessed with -C to the compiler without problems. In this mode the integrated preprocessor is
little more than a tokenizer for the front ends.
-fpreprocessed is implicit if the input file has one of the extensions .i, .ii or .mi. These are the
extensions that GCC uses for preprocessed files created by -save-temps.