2012-02-25 195 views
6

Possible Duplicate:
Programmatic way to get variable name in C?如何在C++中打印变量的名称?

我在此处发布此消息之前检查了一些博客。我已经尝试过以下代码片段...

int a=21; 

int main() 
{ 
    cout<<#a<<a<<endl; 
    return 0; 
} 

我在Ubuntu 10.04上使用g ++编译器。我得到以下错误:

sample.cpp:17: error: stray ‘#’ in program. 

请教我如何打印变量名称。

+1

如果您使用'g ++'和'cout',为什么要标记C? – cnicutar 2012-02-25 14:48:55

+5

'cout <<“a”<< endl;' – ouah 2012-02-25 14:50:18

+0

查看http://stackoverflow.com/questions/1623111/programmatic-way-to-get-variable-name-in-c – 2012-02-25 14:50:27

回答

14

# stringifying宏只能在宏内工作。

你可以做这样的事情:

#include <iostream> 

#define VNAME(x) #x 
#define VDUMP(x) std::cout << #x << " " << x << std::endl 

int main() 
{ 
    int i = 0; 
    std::cout << VNAME(i) << " " << i << std::endl; 

    VDUMP(i); 

    return 0; 
} 
+1

@JamesMcLaughlin - 但你可以制作宏观更复杂。 – 2012-02-25 14:54:39

+3

@JamesMcLaughlin不完全相同:如果您将变量重命名为'j'并忘记更新''i''字符串,则不会有编译时错误;在*变量*上使用'VNAME'宏可确保打印值与变量的编译时名称保持“同步”。 – dasblinkenlight 2012-02-25 14:56:14

+1

@dasblinkenlight如果将变量重命名为'j'并且有另一个名为'i'的变量呢?没有编译时错误,它会显示错误的名称。刚添加的'VDUMP'宏更好。 – 2012-02-25 17:50:13

0

#是,如果你正在写的宏。

如果你的cout行是一个宏,它会按照你期望的方式工作。

如果你不是在一个宏,你只需键入"a"