6

Googleの助けがないので、たとえば「改善された」std ::coutのように動作するC++(g ++)デバッグマクロを作成できるかどうか誰かに教えてもらえないでしょうか。アイデアは、<<を介して引数を受け入れ、次のようにテキストを追加することです。

DBG << "Hello" << world;

生成する可能性があります

myfile.cpp 1420 Hello world

この種のことを行うロギングライブラリ(?)/マクロ(?)があることを私は知っています。いくつかのパッケージを使用せずに、それがどのように行われるかに興味があります。

4

3 に答える 3

17

マクロはendl、破棄時に呼び出す一時変数を作成できます。一時的なものは、囲んでいる式が終了するまで、通常はで終了し;ます。

#include <iostream>

struct X {
  ~X() { std::cout << std::endl; }
};

#define DBG (X(), std::cout << __FILE__ << " " << __LINE__ << " ")

int main () {
  std::string world(", world");
  DBG << "Hello" << world;
}
于 2012-10-15T21:09:42.790 に答える
6

どうですか:

#define DBG std::cout << __FILE__ << " " << __LINE__ << " "

http://ideone.com/mN5n3

十分近い!残念ながら、world事前に変数を宣言する必要があります。

于 2012-10-15T20:55:39.313 に答える
1

デバッグマクロの背後にある考え方は、リリースモードの場合は何もコンパイルしないということです。これを試して;

#ifdef _DEBUG
    #define MESSAGE(x) (std::cout << __FILE__ << " " << __LINE__ << " " << x);
#else
    #define MESSAGE(x) ;
#endif

int _tmain(int argc, _TCHAR* argv[])
{
    MESSAGE("Hello");
    return 0;
}

リリースモードでMESSAGE(x)は効果はありませんが、デバッグモードではコマンドラインにメッセージが表示されます。

于 2012-10-15T21:10:05.440 に答える