了解使用#的C++宏

dau*_*ama 4 c++ macros

我有一个C++宏,其语法是我以前从未见过的:

#define ASSERT(a) \
if (! (a)) \
{ \
  std::string c; \
  c += " test(" #a ")";
}
Run Code Online (Sandbox Code Playgroud)

请问你在这里解释一下#的用法吗?我想把宏放在一个静态函数中,但在我想完全理解它的作用之前.

谢谢

Fil*_*efp 7

#在宏中的使用意味着宏参数将用引号括起来"":

#define FOOBAR(x) #x

int main (int argc, char *argv[])
{
  std::cout << FOOBAR(hello world what's up?) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

产量

hello world what's up?
Run Code Online (Sandbox Code Playgroud)

另一个例子

在下面我们显示foo.cpp的内容,然后在预处理器运行后文件的样子:

:/tmp% cat foo.cpp
#define STR(X) #X

STR (hello world);
Run Code Online (Sandbox Code Playgroud)

...

:/tmp% g++ -E foo.cpp # only run the preprocessor
# 1 "foo.cpp"
# 1 "<command-line>"
# 1 "foo.cpp"


"hello world";
Run Code Online (Sandbox Code Playgroud)

我在哪里可以阅读更多?

查看以下指向cpp(C预处理器)文档中的条目的链接: