2011-10-14 26 views
6

Hata ayıklama (günlüğe kaydetme) sırasında görüntülenen üyeler için değişken adı için bir makro kullanarak konsola yazdırmaya çalışıyorum. Nasıl yapmalı? Aşağıdakileri denedim ama işe yaramıyor.yazdırma değişkeni adı #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

"Çalışmıyor" u tanımlayın. Size geçmişte birçok kez söylemek zorundayım, ki bu utanç verici. –

+0

Merhaba Tomalek, lütfen aşağıdaki cevaba bakınız. '#' Karakterini eklemek yeterlidir –

+2

Evet, cevabın bende ne olduğunu biliyorum. Ama ben, biraz geç bir şekilde, doğru soruları yazmaya çalışıyorum. –

cevap

17

Auch ... Çözümü buldum. Aksi yüzden, derleyici veri türüne göre akış operatörü seçer

#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; 
} 

Bu şekilde:

Ben C için bu

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

gibi makro yazmalıdır ++ bunu kullanmaktan Her biri için farklı makrolarla uğraşmak zorundadır ve herhangi bir std :: ostream'e gidebilir, sadece std :: cout'u değil. Sadece veri için uygun akış operatör temin:

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

Ama # x tarafından sağlanan değişken isim makro değiştirmek için bir şablon yoluydu, ya da en azından diliyorum.