おすすめできるかはわかりませんが…
ヘッダーには次のものを含めることができます。
#define LIB_VERSION_SUFFIX _3_17
#define LIB_PASTER(x, y) x ## y
#define LIB_EVALUATOR(x, y) LIB_PASTER(x, y)
#define LIB_FUNCTION(x) LIB_EVALUATOR(x, LIB_VERSION_SUFFIX)
#define lib_functionA LIB_FUNCTION(lib_functionA)
extern int lib_functionA(const char *, int);
等。
コードのユーザーは、装飾されていない関数名 (lib_functionA) に関して記述しますが、ヘッダーは正しいバージョン サフィックスが追加されることを保証します。
必ずしもすべての関数を変更する必要はありません。常に使用されるいくつかの機能がバージョン番号で装飾されていることを確認する必要があります。初期化関数 ( lib_init()
、おそらく) がある場合は、それを使用します。変数に対して行うことができます。難しい部分は、変数が各プログラムで参照されるようにすることです。
プログラムをコンパイルせずに任意のバージョンとリンクできるように、ライブラリへのインターフェイスがバージョン間で変更されないようにすることがより一般的であることに注意してください。