5

私はライブラリ1-1.hを持っています。

#include <1-1.h>;

構造体は次のとおりです。

struct bucket { ... }

残念ながら、このライブラリはサードパーティであり、1.2 で struct バケットをbucket_t { ... } に変更しました。私のコードはすべてバケットを使用していますが、bucket_t との互換性も望んでいます。

次のことは可能ですか。

#ifndef bucket
    typedef bucket_t bucket;
#endif

(コードは機能しませんが、バケットが存在する場合はbucket_tに設定したいと思います。ありがとう。

4

2 に答える 2

3

1 つのオプションは、使用しているバージョンを指定する独自の定義済みシンボルをプロジェクトまたはメイクファイルに追加することです。LIBRARY1_1 や LIBRARY1_2 のようなもの。どちらも定義されていない場合は、エラーを報告します。これは、以下のような独自のインクルード ファイルを使用して行うことができます。

使用するバージョンごとにヘッダーファイルが異なる場合...

my1-1.h

#if defined( LIBRARY1_1 )
#include <1-1.h>
#elif defined( LIBRARY1_2 )
#include <1-2.h>
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif

各バージョンのヘッダーに同じファイル名が使用されている場合...

my1-1.h

#include <1-1.h>
#if defined( LIBRARY1_1 )
#elif defined( LIBRARY1_2 )
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif
于 2013-06-24T21:00:46.717 に答える
0

プリプロセッサは言語について多かれ少なかれ何も知りません。

私は次のようなものを選びます。ライブラリを含むソース ファイルで、または同じことを繰り返さないようにヘッダーを記述します。

#if USE_LIBRARY_1_1
#include <1-1.h>
#elif USE_LIBRARY_1_2
#include <1-2.h>
typedef bucket_t bucket
#endif
于 2013-06-24T21:08:17.620 に答える