1

_vscwprintf()/ vswprintf()(経由で_vsctprintf()/ ) を使用して、 ed バッファー_vstprintf()に任意の長さの書式設定された文字列を作成するプロジェクトがあります。malloc()

Visual C++ 2008 でプロジェクトを開始したとき、次の_vstprintf()3 つのパラメーターを使用しました。

int vswprintf(wchar_t * _String, const wchar_t * _Format, va_list _Ap)

しかし、Visual C++ 2012 で戻ってきたとき、プロジェクトをしばらく離れた後、MS が関数を変更して 4 つのパラメーターを取るようになっていることがわかりました。

int vswprintf(wchar_t * _String, size_t _Count, const wchar_t * _Format, va_list _Ap)

コードを Visual C++ 2008、2010、および 2012 でビルドできるようにしたいと考えています (Linux および Solaris にも移植可能です)。

#ifdef関数の 3 パラメーターまたは 4 パラメーター バージョンで正しくビルドできるように、チェックできるシンボルはありますか?

コンパイルしている Visual C++ のバージョンを示すシンボルがあると思いますが、これは正しい方法ですか? たとえば、新しいコンパイラが古い C ライブラリまたはランタイムでビルドできる可能性、またはその逆の可能性はありますか?

それが違いを生む場合、私のコードは実際にはC++ではなくCを使用しています。

4

1 に答える 1