包含路径的字符串连接
String concatenation for include path
是否有一种方法来连接两个字符串字面量形成一个包含路径?
代码存根:
#define INCLUDE_DIR "/include"
#include INCLUDE_DIR "/dummy.h"
看看这个问题,答案指向不同的方向(编译器命令行)。在这里提到,这似乎是不可能的,但我想知道这个话题是否已经挖得足够深。
(我确实有一个与此相关的用例,请将您的答案/评论集中在这个问题上。)
这似乎是不可能的。我将在这里报道Eric的回答的相关部分(他似乎不再活跃了)。
编译器将在
#include
行(每个C2011 [N1570] 6.10.2),但语义没有完全定义和不能用于连接文件路径组件,除非附加C实现的帮助。所以这一切让你Do是一些提供完整路径的简单替换,例如:#define MyPath "../../path/to/my/file.h" #include MyPath
链接到文档。特别是本节没有给可移植解决方案留下太多希望:
预处理符号序列的方法一个
<
和一个>
预处理令牌对或一对"
字符是组合成一个单一的头名称预处理令牌是实现定义。
为了完整起见,也许可以尝试使用https://stackoverflow.com/a/27830271/2436175。当我有时间的时候我会研究这个
我不确定这正是你想要的,但无论如何。
#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主机上工作。
注:如果有人可以用其他编译器检查这个代码片段,例如MSVC.
只需避免空格和连接(##),并使用<</p>
#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)
相关文章:
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 这两个C++语句连接字符串有什么区别?
- 连接字符串族
- 如何使用 + 运算符连接字符串
- 如何按照 Google C++风格指南连接字符串文字?
- 我的字符串类的 += 运算符有问题,它没有正确连接字符串
- 如何编写模板函数来添加整数但连接字符串和字符类型?
- 无法创建栅格堆栈,因为我无法连接字符串(dir_name + 文件名)
- 如何在不使用对象的情况下连接字符串、整数和浮点数
- 在std :: string中连接字符串的选项
- 连接字符串的最佳方法是什么?
- 在实体框架C /CLI上配置连接字符串
- 在 c++ 中连接字符串和 int
- 如何连接字符串并传递给 system() 调用
- 有没有办法方便地为 Winsock send() 生成 HTTP 标头,而不是手动连接字符串
- 在可变参数模板函数中连接字符串(和数字)
- 连接字符串时出现意外问题
- 如何在 c++ 中连接字符串
- 自动连接字符串和 int C++
- 我的c++程序在我不告诉他的地方连接字符串