Knowledge base dedicated to Linux and applied mathematics.

Home > C++ > FAQ C++ > FAQ C++ - gcc/g++ > gcc / g++ preprocessor flags for the compiler version number

gcc / g++ preprocessor flags for the compiler version number


These macros are defined by all GNU compilers that use the C preprocessor: C, C++, Objective-C and Fortran. Their values are the major version, minor version, and patch level of the compiler, as integer constants. For example, GCC 3.2.1 will define


to 3,


to 2, and


to 1. These macros are also defined if you invoke the preprocessor directly.


is new to GCC 3.0; it is also present in the widely-used development snapshots leading up to 3.0 (which identify themselves as GCC 2.96 or 2.97, depending on which snapshot you have).

If all you need to know is whether or not your program is being compiled by GCC, or a non-GCC compiler that claims to accept the GNU C dialects, you can simply test


. If you need to write code which depends on a specific version, you must be more careful. Each time the minor version is increased, the patch level is reset to zero; each time the major version is increased (which happens rarely), the minor version and patch level are reset. If you wish to use the predefined macros directly in the conditional, you will need to write it like this:

              /* Test for GCC > 3.2.0 */
              #if __GNUC__ > 3 || \
                  (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
                                     (__GNUC_MINOR__ == 2 && \
                                      __GNUC_PATCHLEVEL__ > 0))

Another approach is to use the predefined macros to calculate a single number, then compare that against a threshold:

              #define GCC_VERSION (__GNUC__ * 10000 \
                                   + __GNUC_MINOR__ * 100 \
                                   + __GNUC_PATCHLEVEL__)
              /* Test for GCC > 3.2.0 */
              #if GCC_VERSION > 30200

Many people find this form easier to understand.


Also in this section

  1. Disable all gcc / g++ warnings
  2. gcc / g++ preprocessor flags for the compiler version number
  3. Build in release mode with full optimizations in gcc / g++
  4. Code that compiles with gcc but not g++
  5. gcc / g++ find where a header file is included from
  6. gcc /g++ Why some variables are not detected as not used during compilation?
  7. g++ compilation option -Weffc++
  8. Undefined Symbol ___gxx_personality_v0
  9. gcc / g++ how to dump all preprocessor definitions