1

これが興味深い質問であることを願っています。未解決の外部シンボルのソースを見つけようとしています。デバッグがオンになっている場合、グローバル ファイル ポインターを使用するデバッグ コードがあります。このデバッグ コードはすべて、次のように #ifdef で保護する必要があります。

#ifdef DO_XLL_DEBUG
fprintf(debugPointer, "hello\n);
...
#endif

DO_XLL_DEBUG を定義すると、すべて問題ありません。DO_XLL_DEBUG の定義を解除すると、すべてがコンパイルされます (念のため再構築を行います) が、リンクの段階で失敗し、debugPointer が見つかりません。

質問は、デバッグ コードの周りで #ifdef に失敗した場所を見つける簡単な方法があるかどうかです。それほど簡単ではない方法をいくつか考えることができます。

Visual Studio 2005 を使用しています。これは C++ プロジェクトです。

ありがとう!

[編集]

すべての提案をありがとう。問題は、Linux (私がほとんどの作業を行っている) で取り組んでいる対応するプロジェクトの一部ではない他の誰かのコードにあったことが判明したため、すぐに見つけられなかったのも不思議ではありません。

4

1 に答える 1

2

互換性のないものを定義するだけdebugPointerで、誤って使用または再定義されたすべての場所をコンパイラに指摘させることができます。多分このように:

#ifndef DO_XLL_DEBUG
#define debugPointer static_assert(false,"damn it!");
#endif

(と呼ばれる他の変数、パラメーターなどがない場合debugPointer

于 2013-10-29T20:58:53.097 に答える