在#define中打印变量名
print variable name in a #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
}
…我找到解决办法了。
我应该这样写宏
#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.
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 为什么我的字符串变量没有打印完整的字符串?
- C++ - 声明中变量名后面的括号
- 如何使替换 c 函数的变量名成为错误?
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 是否可以创建没有变量名的变量
- fstream库,试图创建一个变量名为(c++)的文件
- 一个数组C++中的消息和变量名
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 打印一个变量将打印另一个变量的值(以 C++ 为单位)
- C++ 类变量未打印分配的正确值
- 如何在实例化类类型的变量时打印其名称
- 数组的变量名和该数组的地址有什么区别?
- 未使用的变量禁止打印?
- 如何将变量名设置为字符串?C++
- 类中具有相同变量名的多重继承
- 在#define中打印变量名
- 没有宏的c++简单反射:打印变量名及其值