如何转义 C 预处理器标记中的下划线?
以下代码片段应该采用 PROJECT 的值(在 Makefile 中定义) 并创建一个包含文件名。 例如,如果 PROJECT=classifier,那么它应该在最后为 PROJECTINCSTR 生成 classifier_ir.h
我发现只要我不尝试在后缀中使用下划线,此代码就可以工作。 然而,下划线的使用不是可选的 - 我们的代码库在任何地方都使用它们。 我可以解决这个问题,因为 PROJECT 的值数量有限,但我想知道如何使以下带有下划线的代码片段实际工作。 能逃脱吗?
#define PROJECT classifier
#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)
#include PROJECTINCSTR
编辑:编译器应该尝试包含 classifier_ir.h,而不是 PROJECT_ir.h。
The following snippet is supposed to take the value of PROJECT (defined in the Makefile)
and create an include file name. For example, if PROJECT=classifier, then it should at the end generate classifier_ir.h for PROJECTINCSTR
I find that this code works as long as I am not trying to use an underscore in the suffix. However the use of the underscore is not optional - our code base uses them everywhere. I can work around this because there are a limited number of values for PROJECT but I would like to know how to make the following snippet actually work, with the underscore. Can it be escaped?
#define PROJECT classifier
#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)
#include PROJECTINCSTR
Edit: The compiler should try to include classifier_ir.h, not PROJECT_ir.h.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
该准系统示例适用于 gcc (v4.1.2) 并尝试包含“PROJECT_ir.h”
That barebone example works with gcc (v4.1.2) and tries to include "PROJECT_ir.h"
这对我有用:
This works for me: