gpt4 book ai didi

c - 在 C 宏中的字符串化之前进行标记串联

转载 作者:行者123 更新时间:2023-11-30 14:51:47 26 4
gpt4 key购买 nike

我有两个 C 宏,第一个基本上是连接两个标记

#define _PY_CLASS_NAME(name) Py##name

第二个宏是字符串化输入参数

#define STR(text) #text

因为当我尝试类似的事情时 C 预处理器的工作方式

STR(_PY_CLASS_NAME(name))

我实际上得到了“_PY_CLASS_NAME(name)”。那么问题来了,如何避免呢?

我尝试过类似的事情

#define CONCAT(A, B) #A###B

并且它有效。但也许这是更好的方法?

最佳答案

#define _PY_CLASS_NAME(name) Py##name
#define STR(a) STR_(a)
#define STR_(a) #a

这以不同的方式解决了问题,并且还阐明了宏的工作原理。原因是 - 当在宏主体中替换宏参数时,它们会被扩展,直到它们与该宏中的 ### 预处理器运算符一起出现。

现在执行此操作 printf("%s\n",STR(_PY_CLASS_NAME(name))); 打印 Pyname

编辑:你提到的第二个不起作用。如前所述,编译器提示缺少有效的预处理标记。

关于c - 在 C 宏中的字符串化之前进行标记串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48018305/

26 4 0
文章推荐: c# - 获取2个圆的交点
文章推荐: javascript - 通过 iFrame 将新的 Google 网站嵌入其他网页
文章推荐: javascript - 追加