-1

一部の (非常に) クロスプラットフォーム コードを変更し_CrtSetDbgFlag()、Visual C++ ランタイムに実装されている関数の呼び出しを追加する必要があります。明らかに、この関数は、コードが Visual C++ ランタイム ヘッダーに対してコンパイルされている場合にのみ使用できます。

_MSC_VERマクロを使用して、これらの呼び出しを条件付きで含めたいと考えています。

#ifdef _MSC_VER
_CrtSetDbgFlag(value);
#endif

これがコンパイルされない合理的な構成はありますか? Visual C++ を使用して、Visual C++ 以外のランタイムに対してコードをコンパイルできますか?

コードが Visual C++ でコンパイルされて_MSC_VER定義されている可能性はありますが、コンパイル中に Visual C++ ランタイムのデバッグは利用できませんか?

4

1 に答える 1

0

理論的には、そうです。

プログラムがダイナミック ランタイム ライブラリ (MSVCRTxx.DLL など) を使用して (MSVC によって) コンパイルされ、ランタイム DLL が何らかの理由 (パッチ適用、インストルメンテーション、フックなど) で変更されている場合、一部の API が正しく動作しない可能性があります。プログラムはほとんどクラッシュします。しかし、これは一般的なケースではないと思います。

したがって、この問題が本当に心配な場合は、このコードを静的にコンパイルしてリンクすることをお勧めします( /MT コンパイラ オプションを参照してください)。_CrtSetDbgFlagこれにより、 の正しい実装がバイナリに組み込まれることが保証されます。

于 2013-02-07T13:35:06.920 に答える