c++ - 了解使用 # 的 C++ 宏

标签 c++ macros

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

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

能否请您解释一下 # 在这里的用法? 我想将宏放在静态函数中,但在此之前我想完全理解它的作用。

谢谢

最佳答案

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

#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 预处理器)文档中条目的链接:

关于c++ - 了解使用 # 的 C++ 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8587968/

相关文章:

c++ - 与 DEBUG 宏混淆

c++ - 如何检查多态子类的模板参数类型

C++ 自定义#pragma

objective-c - 带返回值的宏

C++;仅在匹配预设模式时接受用户输入

c - 检测宏的使用? (错误号)

c++ - 这个 C++ 宏有什么作用(竞争性编程)?

c++ - 从其单元格小部件项中检索父 QTableWidget

c++ - 使用 F5 键刷新列表控件 C++

c++ - 使用 OpenCV 和 C++ 在 Keypress 上截取网络摄像头画面