От ГНУ CPP руководства ...
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
Эти макросы определены всеми компиляторами GNU, которые используют C препроцессор: C, C++, Objective-C и Fortran. Их значениями являются основная версия, младшая версия и уровень исправления компилятора, как целочисленные константы. Например, GCC 3.2.1 определит __GNUC__
на 3, __GNUC_MINOR__
на 2 и __GNUC_PATCHLEVEL__
на 1. Эти макросы также определены, если вы вызываете препроцессор напрямую.
__GNUC_PATCHLEVEL__
является новичком в GCC 3.0; он также присутствует в широко используемых моментальных снимках разработки, ведущих до 3.0 (которые идентифицируют себя как GCC 2.96 или 2.97, в зависимости от того, какой снимок у вас есть).
Если вам нужно знать, является ли ваша программа скомпилирована GCC или компилятором не GCC, который утверждает, что принимает диалекты GNU C, вы можете просто проверить __GNUC__
. Если вам нужно написать код, который зависит от конкретной версии, вы должны быть более осторожны.Каждый раз, когда младшая версия увеличивается, уровень исправления сбрасывается до нуля; каждый раз, когда основная версия увеличивается (что случается редко), второстепенная версия и уровень исправления сбрасываются. Если вы хотите использовать предопределенные макросы непосредственно в условном, вам нужно будет написать так:
/* Test for GCC > 3.2.0 */
#if __GNUC__ > 3 || \
(__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
(__GNUC_MINOR__ == 2 && \
__GNUC_PATCHLEVEL__ > 0))
Возможный дубликат [Как проверить текущую версию GCC?] (Http://stackoverflow.com/questions/259248/how-do-i-test-the-current-version-of-gcc), как общие C/C++ –