2011-10-14 10 views
6

デバッグ(ロギング)中に表示メンバーの変数名をマクロでコンソールに出力しようとしています。 どうすればいいですか?私は次のことを試みたが、それは仕事ではない。#defineに変数名を出力する

#define MY_PRINT(x) std::cout << "'x'=" << x << std::endl; 

int main(){ 
    int my_variable=3; 
    MY_PRINT(my_variable); 
    // I would like to print to console 
    // 'my_variable'=3 
} 
+2

「動作しません」と定義します。私は過去に何度もあなたに言わなければならなかったが、それは残念だ。 –

+0

こんにちはTomalek、以下の回答をご覧ください。 「#」文字を追加するだけで十分です –

+2

はい、答えは自分自身もわかります。しかし、ちょっと遅れて、あなたに正しい質問を書くように訓練しようとしています。 –

答えて

17

Auch ...私は解決策を見つけました。あなたがいないので、コンパイラはデータ型に基づいてストリーミング演算子を選択します

#define STR(x) #x << '=' << x 

int main() 
{ 
    int i = 1; 
    std::string str("hello"); 
    std::vector<std::string> vec; 
    my_class mc; 

    ... 

    std::cout << STR(i) << std::endl 
      << STR(str) << std::endl 
      << STR(vec) << std::endl 
      << STR(mc) << std::endl; 

    return 0; 
} 

この方法:

私はCのために、この

#define MY_PRINT(x) std::cout << #x"=" << x << std::endl 
2

ようなマクロを書くべき++私はこれを使用しますそれぞれ別々のマクロを気にする必要があり、std :: coutだけでなく、どんなstd :: ostreamにも行くことができます。ちょうどあなたのデータのための適切なストリーミング演算子提供:

std::ostream operator<<(std::ostream&, const T&); 
std::ostream operator<<(std::ostream&, const std::vector<T>&); 
etc 

をしかし、私は、マクロ、または#Xが提供する少なくとも変数名を置き換えるために、テンプレートの方法があった望みます。

関連する問題