What does __STRICT_ANSI__ mean in C (not C++) mode? The doc says: "The macro `__STRICT_ANSI__' is predefined when the `-ansi' option is used." I.e. when the compiler is implementing strict ISO C90.
But it is also defined when the compiler is implementing strict ISO C99. $ touch empty.c $ gcc -std=c99 -E -dM empty.c | grep '\(__STRICT\|__STDC_V\)' #define __STRICT_ANSI__ 1 #define __STDC_VERSION__ 199901L And -ansi is not implied in this mode: -std=c99 -ansi apparently means strict ISO C90: $ gcc -std=c99 -ansi -E -dM empty.c | grep '\(__STRICT\|__STDC_V\)' #define __STRICT_ANSI__ 1 Possible resolutions: A) Document that __STRICT_ANSI__ can also mean strict ISO C99. B) Change "gcc -std=c99" to define __STRICT_C99__ instead of __STRICT_ANSI__. -- Summary: __STRICT_ANSI__ meaning incorrectly documented Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bruno at clisp dot org GCC build triplet: x86_64-suse-linux GCC host triplet: x86_64-suse-linux GCC target triplet: x86_64-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29994