有没有办法连接2个字符串文字以形成包含路径?
代码存根:
#define INCLUDE_DIR "/include"
#include INCLUDE_DIR "/dummy.h"
查看this question,答案指向不同的方向(编译器命令行)。提到here它似乎是不可能的,但我想知道这个话题是否已被挖掘出来。
(我确实有一个与此相关的用例,请仅关注此问题的答案/评论。)
答案 0 :(得分:0)
我不确定这是你想要的,但无论如何。
#define DECORATE(x) <x>
#define MAKE_PATH(root, file) DECORATE(root file)
#define SYS_DIR(file) MAKE_PATH(sys/, file)
#define ARPA_DIR(file) MAKE_PATH(arpa/, file)
#include SYS_DIR(types.h)
#include SYS_DIR(socket.h)
#include ARPA_DIR(inet.h)
请注意,生成的文件名包含额外的空格 - <sys/ types.h>
,因此它可能不是交叉编译器解决方案。但至少对我而言,它适用于GCC 4.8 / 4.9上的Linux主机。
P.S。如果有人可以使用其他编译器检查此代码段,那将是很好的,例如MSVC。
答案 1 :(得分:0)
这看起来真的不可能。我将在此处报告Eric Postpischil's answer的相关部分(他似乎不再活跃)。
编译器将在
#include
行(每个C)进行宏替换 2011 [N1570] 6.10.2 4),但语义没有完全定义和 不能在没有附加的情况下连接文件路径组件 来自C实施的帮助。所以这一切都可以让你 do是一些提供完整路径的简单替换,例如:#define MyPath "../../path/to/my/file.h" #include MyPath
Link to documentation。特别是本节对便携式解决方案没有太多希望:
一系列预处理令牌之间的方法 一个
<
和一个>
预处理令牌对或一对"
个字符 被合并为单个头名称预处理令牌 实现定义的。
为了完整起见,可以使用https://stackoverflow.com/a/27830271/2436175尝试某些事情。当我有片刻时,我会调查一下......
答案 2 :(得分:0)
简单地避开空格和连接(##)并使用&lt; &GT;它简化了一切:
#include <QtCore/QtGlobal>
#define QT_VERSION_PREFIX QT_VERSION_MAJOR.QT_VERSION_MINOR.QT_VERSION_PATCH
#define _CONCATE(a, c) <a/QT_VERSION_PREFIX/a/private/c>
#include _CONCATE(QtWidgets, qwidgettextcontrol_p.h)