使用コンパイラのチェック

#include <iostream>

#if defined (_MSC_VER)
#    if (_MSC_VER == 1600)
#        define COMPILER_NAME "vc10"
#
#    elif (_MSC_VER == 1500)
#        define COMPILER_NAME "vc9.0"
#
#    elif (_MSC_VER == 1400)
#        define COMPILER_NAME "vc8.0"
#
#    else
#        define COMPILER_NAME "unknown"
#
#    endif
#
#elif defined (__GNUC__)
#    if(__GNUC__ == 4)
#        define COMPILER_NAME "gcc4.x"
#
#    elif (__GNUC__ == 3)
#        define COMPILER_NAME "gcc3.x"
#
#    else
#        define COMPILER_NAME "unknown"
#
#    endif
#else
#    define COMPILER_NAME "unknown"
#
#endif

int
main(){
    
    std::cout << COMPILER_NAME << std::endl;
    

    return 0;
}


msvc は、【_MSC_VER】、gcc は【__GNUC__】の定義で判断を行ないます。
上のソースでは、"==" で比較していますが、実際に使用する場合は、">=" の方がいいかも。
今回はやっていませんが、gcc の場合は【__GNUC_MINOR__】や【__GNUC_PATCHLEVEL__】などを見ればメジャー以下のバージョンも見れるみたいです。
その他のバージョンに関してはリンク先を参照してみてください。


[参照]
http://tech.ckme.co.jp/cpp/cpp_predef.shtml
http://www.ailight.jp/blog/sha256/archive/2009/03/08/27314.aspx