C / C ++宏字符串连接#define STR1 "s"#define STR2 "1"#define STR3 STR1 ## STR2是否有可能连接STR3 ==“s1”?您可以通过将args传递给另一个宏函数来完成此操作。但是有直接的方法吗?
3 回答
MYYA
TA贡献1868条经验 获得超4个赞
如果它们都是字符串,你可以这样做:
#define STR3 STR1 STR2
预处理器自动连接相邻的字符串。
编辑:
如下所述,它不是预处理器,而是执行串联的编译器。
慕哥6287543
TA贡献1831条经验 获得超10个赞
提示:STRINGIZE
上面的宏很酷,但如果你犯了一个错误并且它的参数不是一个宏 - 你的名字中有一个拼写错误,或者忘#include
了头文件 - 那么编译器会愉快地将声称的宏名称放入字符串没有错误。
如果您打算将参数设置STRINGIZE
为具有正常C值的宏,那么
#define STRINGIZE(A) ((A),STRINGIZE_NX(A))
将它扩展一次并检查它的有效性,丢弃它,然后再将它再次扩展为一个字符串。
我花了一段时间才弄清楚为什么STRINGIZE(ENOENT)
最终结束"ENOENT"
而不是"2"
......我没有包括在内errno.h
。
- 3 回答
- 0 关注
- 1005 浏览
添加回答
举报
0/150
提交
取消