-Wcomment
-Wcomments
Warn whenever a comment-start sequence /* appears in a /* comment, or whenever a backslash-newline appears in a // comment. This warning is enabled by -Wall.

-Wtrigraphs
Warn if any trigraphs are encountered that might change the meaning of the program.  Trigraphs within comments are not warned about, except those that would form escaped newlines.

This option is implied by -Wall.  If -Wall is not given, this option is still enabled unless trigraphs are enabled.  To get trigraph conversion without warnings, but get the other -Wall warnings, use -trigraphs -Wall -Wno-trigraphs.

-Wundef
Warn if an undefined identifier is evaluated in an #if directive. Such identifiers are replaced with zero.

-Wexpansion-to-defined
Warn whenever defined is encountered in the expansion of a macro (including the case where the macro is expanded by an #if directive). Such usage is not portable. This warning is also enabled by -Wpedantic and -Wextra.

-Wunused-macros
Warn about macros defined in the main file that are unused.  A macro is used if it is expanded or tested for existence at least once. The preprocessor also warns if the macro has not been used at the time it is redefined or undefined.

Built-in macros, macros defined on the command line, and macros defined in include files are not warned about.

Note: If a macro is actually used, but only used in skipped conditional blocks, then the preprocessor reports it as unused.  To avoid the warning in such a case, you might improve the scope of the macro's definition by, for example, moving it into the first skipped block. Alternatively, you could provide a dummy use with something like:

     #if defined the_macro_causing_the_warning
     #endif

-Wno-endif-labels
Do not warn whenever an #else or an #endif are followed by text. This sometimes happens in older programs with code of the form

     #if FOO
     ...
     #else FOO
     ...
     #endif FOO

The second and third FOO should be in comments. This warning is on by default.