【发布时间】:2012-07-06 18:46:30
【问题描述】:
我用这个代码
#define _(x) cout << #x;
作为宏,在程序的开头,返回一个变量名。它在 main 中运行良好,但在嵌套在其他函数中时根本不行。例如,如果定义
void print (int p)
{
_(p); cout << "=" << p;
}
int main()
{
int a=1, b=2;
_(a);
cout << " = " << a;
print(b);
}
输出将是 a = 1 p = 2
有什么办法克服这个问题吗?
【问题讨论】:
-
但这正是预期的结果。您的第一个变量名为
a,第二个变量名为p -
为什么? Why> 为什么对变量名感兴趣?
-
他期望输出为 b=2 但它不起作用,因为他的宏被用来吐出根据他正在操作的范围而变化的变量名。在你的子函数中编译器将变量的名称视为局部范围变量名称,并将在链接到更高级别的范围时连接这些编译符号。我能想到的存储变量名称的唯一方法是从同一范围调用您的宏,然后将其交给类构造函数或其他函数来维护变量。
-
@Wug - 调试器更简单,更有效。
-
非常糟糕的命名约定:宏名称没有描述其用途;标识符以下划线“_”开头;没有关于宏的用途或用途的 cmets。