http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57665
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- 1) You didn't attach a testcase 2) GCC 4.3 is unsupported and unmaintained 3) You have the wrong number of underscores: #define GCC_VERSION #__GNUC__ "." #___GNUC_MINOR__ "." #__GNUC_PATCHLEVEL ^^^ ^^ 4) why are you expecting __GNUC__ to behave differently to this? #define GNUC 4 #define GNUC_MINOR 3 #define GNUC_PATCHLEVEL 4 #define GCC_VERSION #GNUC "." #GNUC_MINOR "." #GNUC_PATCHLEVEL const char* ver = GCC_VERSION; That's not how the preprocessor works.