在#define中打印变量名

时间:2011-10-14 10:07:34

标签: c++ macros console-application

我正在尝试使用宏打印到控制台,调试(日志记录)时显示成员值的变量名称。 怎么做?我尝试了以下但它不起作用。

#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 :(得分:17)

奥奇......我找到了解决方案。

我应该像这样编写宏

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

答案 1 :(得分:2)

对于C ++,我使用它:

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

这样编译器会根据数据类型选择流操作符,因此您不需要为每个宏打扰不同的宏,它可以转到任何std :: ostream,而不仅仅是std :: cout。只需为您的数据提供适当的流媒体运营商:

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

但是我希望有一种模板方法来替换宏,或者至少是#x提供的变量名。