2

条件付きデバッグを使用してプロジェクトをセットアップしようとしています。私が欲しいのはdebug、デバッグモードで実行しているときにある種の printf/cout/anything に #defined であり、プロダクションモードで実行しているときに null ステートメントに #defined であるマクロを持つことです。これどうやってするの:

マクロを使用してみました_DEBUGが、実行中のモードに関係なく、常に引数が出力されます。

struct debugger{template<typename T> debugger& operator ,(const T& v){std::cerr<<v<<" ";return *this;}}dbg;
#if _DEBUG
    #define debug(...) {dbg,__VA_ARGS__;std::cerr<<std::endl;}
#else
    #define debug(...) // Just strip off all debug tokens
#endif

私のメインでは:

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int a=1,b=2,c=3;
    debug(a,b,c);
    cin>>a;
}

それが役立つ場合、私はVisual Studio 2012を使用しています

4

2 に答える 2

0

サンプルのコードは正しいです。問題は、その定義_DEBUGがどこから来ているかです。適切なセットアップでは、MSVC プロジェクトや他のどこからも来ないはずです。この場合、ビルドの種類に応じて、期待どおりの結果が得られます。

ほとんどの場合、独自のコードまたはインクルードするヘッダーのいずれかで定義されています。

あなたの投稿には、 の本当の起源を推測するのに十分な情報がありません_DEBUG

デバッグ モードでは、MSVC からの定義は次のようになります。

#define _DEBUG

これは、DEBUG ビルドでも何も表示されないことを意味します。出力が表示されると、defn が存在し、空ではないことを意味します。この定義は、MSVC からのものではありません。

于 2012-10-29T00:55:53.200 に答える
0

これを試して

struct debugger{template<typename T> debugger& operator ,(const T& v){std::cerr<<v<<" ";return *this;}}dbg;
#if _DEBUG
    #define debug(...) {dbg,__VA_ARGS__;std::cerr<<std::endl;}
#else
    #define debug
#endif
于 2012-10-29T01:11:09.383 に答える