在#define中打印变量名

print variable name in a #define

本文关键字:变量名 打印 #define      更新时间:2023-10-16

我试图在调试(日志记录)时使用宏打印出显示成员值的变量名称到控制台。怎么做呢?我试了下面的方法,但是行不通。

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

…我找到解决办法了。

我应该这样写宏

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

对于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.

提供的变量名。