我正在扩展我们的内部调试库,并且碰到了奇怪的墙。我想将变量名称输出为字符串。在此站点上的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++都不会在运行时保留变量名。

您的所有宏所做的就是替换在编译时发生的文本。

09-04 10:41