我正在扩展我们的内部调试库,并且碰到了奇怪的墙。我想将变量名称输出为字符串。在此站点上的elsewhere中,我发现可以使用宏在文件中执行此操作:
#define VarToStr(v) #v
...
printf("%s\n", VarToStr(MatName));
输出
MatName
。但是,现在让我们通过跨文件的函数(Matrix是已定义的类型)进行尝试:// DebugHelpers.h
#define VarToStr(v) #v
...
void PrintMatrix(const Matrix &InputMat)
{
printf("%s\n", VarToStr(InputMat));
... // output InputMat contents
}
// DataAnalysis.cc
#include DebugHelpers.h
...
void AnalysisSubProgram342()
{
Matrix MatName;
...
PrintMatrix(MatName);
}
这将输出
InputMat
而不是MatName
。另一个文件中的函数如何从调用文件中获取变量名?尽管更复杂的解决方案(包装器类等)对于更大的社区很有用,但我的实现需要将对现有代码/类的影响最小化。
更新:
受天顶(Zenith)评论的启发,为比较起见,我实现了他提出的两个解决方案,并迅速使它们都起作用。该宏适用于简单的输出,而该功能则允许进行更复杂的工作(以及类型检查/重载)。我不知道预处理器宏可能是如此复杂。我会记住两者以备将来使用。谢谢 !
最佳答案
你不能C和C++都不会在运行时保留变量名。
您的所有宏所做的就是替换在编译时发生的文本。