为了账号安全,请及时绑定邮箱和手机立即绑定

C / C ++宏字符串连接

C / C ++宏字符串连接

C++ C
HUWWW 2019-08-02 14:17:46
C / C ++宏字符串连接#define STR1      "s"#define STR2      "1"#define STR3      STR1 ## STR2是否有可能连接STR3 ==“s1”?您可以通过将args传递给另一个宏函数来完成此操作。但是有直接的方法吗?
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

如果它们都是字符串,你可以这样做:

#define STR3 STR1 STR2

预处理器自动连接相邻的字符串。

编辑:

如下所述,它不是预处理器,而是执行串联的编译器。


查看完整回答
反对 回复 2019-08-02
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

提示:STRINGIZE上面的宏很酷,但如果你犯了一个错误并且它的参数不是一个宏 - 你的名字中有一个拼写错误,或者忘#include了头文件 - 那么编译器会愉快地将声称的宏名称放入字符串没有错误。

如果您打算将参数设置STRINGIZE为具有正常C值的宏,那么

#define STRINGIZE(A) ((A),STRINGIZE_NX(A))

将它扩展一次并检查它的有效性,丢弃它,然后再将它再次扩展为一个字符串。

我花了一段时间才弄清楚为什么STRINGIZE(ENOENT)最终结束"ENOENT"而不是"2"......我没有包括在内errno.h


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 1005 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信