我有一个C ++宏,其语法是我以前从未见过的:
#define ASSERT(a) \
if (! (a)) \
{ \
std::string c; \
c += " test(" #a ")";
}
由于
答案 0 :(得分:7)
在宏中使用#
意味着宏参数将用引号""
包装:
#define FOOBAR(x) #x
int main (int argc, char *argv[])
{
std::cout << FOOBAR(hello world what's up?) << std::endl;
}
输出
hello world what's up?
在下面我们显示foo.cpp的内容,然后显示预处理器运行后文件的样子:
:/tmp% cat foo.cpp
#define STR(X) #X
STR (hello world);
...
:/tmp% g++ -E foo.cpp # only run the preprocessor
# 1 "foo.cpp"
# 1 "<command-line>"
# 1 "foo.cpp"
"hello world";
查看以下cpp
(C预处理器)文档中的条目链接:
答案 1 :(得分:2)
在宏中,#
“字符串化”变量名称。通过“stringify”我的意思是,变量名称被转换为字符串文字。
例如,如果您有以下宏:
#define PRINT_VARIABLE_NAME(var)printf(#var);
并使用它:
int i;
PRINT_VARIABLE_NAME(i);
它会打印“我”。
在您的情况下,字符串将与“test”连接。
答案 2 :(得分:0)
#a
是一个包含文字a
的字符串。有关详情,请参阅Stringfication。