GCC版本判斷方法

Referenceshttp://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html


如果要用C, C++, Objective-C和Fortran來判斷GCC的版本的話,可以使用以下的Marco




  • __GNUC__
  • __GNUC_MINOR__
  • __GNUC_PATCHLEVEL__

P.S.  __GNUC_PATCHLEVEL__是GCC 3.0才有

還有要判斷編譯器是不是GCC,有很簡單的版法就是直接判斷__GCC__就可以了
例如 #ifdef __GNUC__

Example 1:

int main(int argc, const char *argv[]){

     printf("__GNUC__  :                           %d\n" , __GNUC__);
     printf("__GNUC_MINOR__ :             %d\n" , __GNUC_MINOR__);
     printf("__GNUC_PATCHLEVEL__: %d\n" , __GNUC_PATCHLEVEL__);
     return 0;
}

輸出結果 :

__GNUC__  : 4
__GNUC_MINOR__ : 7
__GNUC_PATCHLEVEL__: 2


這是我的gcc的版本 4.7.2



Example 2:

判斷GCC的版本

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

或是

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

Example 3:

如果你不需要去判斷Patch Level的話,可以使用__GNUC_PREREQ(maj,min)這個Marco
來做判斷。下面是__GNUC_PREREQ的code, 他只是將 __GUNC__左移了16位元在加上__GNUC_MINOR__然後再去跟你輸入的maj跟min做判斷。

# define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))

P.S. 記的要加上 #include<features.h>
張貼留言

這個網誌中的熱門文章

解釋scope.$apply用來做什麼? -- AngularJS

Unions 在C語言的簡單介紹

JavaScript的Timer用法