cpp: Traditional warnings

1 
1 10.4 Traditional warnings
1 =========================
1 
1 You can request warnings about features that did not exist, or worked
1 differently, in traditional C with the '-Wtraditional' option.  GCC does
1 not warn about features of ISO C which you must use when you are using a
1 conforming compiler, such as the '#' and '##' operators.
1 
1    Presently '-Wtraditional' warns about:
1 
1    * Macro parameters that appear within string literals in the macro
1      body.  In traditional C macro replacement takes place within string
1      literals, but does not in ISO C.
1 
1    * In traditional C, some preprocessor directives did not exist.
1      Traditional preprocessors would only consider a line to be a
1      directive if the '#' appeared in column 1 on the line.  Therefore
1      '-Wtraditional' warns about directives that traditional C
1      understands but would ignore because the '#' does not appear as the
1      first character on the line.  It also suggests you hide directives
1      like '#pragma' not understood by traditional C by indenting them.
1      Some traditional implementations would not recognize '#elif', so it
1      suggests avoiding it altogether.
1 
1    * A function-like macro that appears without an argument list.  In
1      some traditional preprocessors this was an error.  In ISO C it
1      merely means that the macro is not expanded.
1 
1    * The unary plus operator.  This did not exist in traditional C.
1 
1    * The 'U' and 'LL' integer constant suffixes, which were not
1      available in traditional C.  (Traditional C does support the 'L'
1      suffix for simple long integer constants.)  You are not warned
1      about uses of these suffixes in macros defined in system headers.
1      For instance, 'UINT_MAX' may well be defined as '4294967295U', but
1      you will not be warned if you use 'UINT_MAX'.
1 
1      You can usually avoid the warning, and the related warning about
1      constants which are so large that they are unsigned, by writing the
1      integer constant in question in hexadecimal, with no U suffix.
1      Take care, though, because this gives the wrong result in exotic
1      cases.
1