36

GCC のバージョンに応じて別のファイルをインクルードしたいと考えています。より正確には、次のように書きたいと思います。

#if GCC_VERSION >= 4.2
#  include <unordered_map>
#  define EXT std
#elif GCC_VERSION >= 4
#  include <tr1/unordered_map>
#  define EXT std
#else
#  include <ext/hash_map>
#  define unordered_map __gnu_cxx::hash_map
#  define EXT __gnu_cxx
#endif

3.2より前のgccは気にしません。

そのための前処理時に変数が定義されていると確信していますが、もう一度見つけることができません。

4

3 に答える 3

53

必要に応じて定義する必要があるマクロがいくつかあります。

__GNUC__              // major
__GNUC_MINOR__        // minor
__GNUC_PATCHLEVEL__   // patch

バージョン形式は major.minor.patch です (例: 4.0.2)。

これらのドキュメントは、こちらにあります

于 2008-11-03T16:59:20.383 に答える
29

OK、さらに検索した後、可能な方法の 1 つは__GNUC_PREREQdefined inを使用することですfeatures.h

#ifdef __GNUC__
#  include <features.h>
#  if __GNUC_PREREQ(4,0)
//      If  gcc_version >= 4.0
#  elif __GNUC_PREREQ(3,2)
//       If gcc_version >= 3.2
#  else
//       Else
#  endif
#else
//    If not gcc
#endif
于 2008-11-03T16:59:48.497 に答える
20

補足として:

すべての定義済みマクロを検索するには:

  • 空のファイル t.cpp を作成します
  • g++ -E -dM t.cpp
于 2008-11-03T17:40:40.957 に答える