我可以将长#include指令拆分为两行吗?

Jon*_*yer 20 c include stringification c-preprocessor

我希望有一种方法可以将#include指令分成两行,这样我的代码就可以符合每行80个字符,尽管需要很长的包含路径.

除了扩展编译器的搜索路径之外,我该如何管理呢?有没有办法将我的长路径字符串分成两行?

"#define"宏扩展显然发生在#include扩展之后,所以这些不起作用:

#define BIGPATH "..."
#include BIGPATH ## "/foo.c"
#include "BIGPATH/foo.c"
#include BIGPATH"/foo.c"
Run Code Online (Sandbox Code Playgroud)

我也试过了

#include "foo" ##
         "bar"
Run Code Online (Sandbox Code Playgroud)

#include "foo" \
         "bar"
Run Code Online (Sandbox Code Playgroud)

无济于事.也许我想要的是不可能的?帮助我,stackoverflow kenobi,你是我唯一的希望.

答案:建立在下面的建议答案上,这是实际对我有用的:

#define STRINGIFY(x) #x
#define PATH(path) STRINGIFY(/my/very/long/path)
#include PATH(foo.h)
#undef PATH
#undef STRINGIFY
Run Code Online (Sandbox Code Playgroud)

Nob*_*ody 12

我不喜欢这个想法,我只想提一下这种可能性.最好的是丹尼尔菲舍尔提到的方式.这个解决方案有点古怪,并不会在所有情况下都能正常工作,但这里编译:

#define PATH(FILE) </path/to/FILE>
#include PATH(file.h)
Run Code Online (Sandbox Code Playgroud)

仅举几个明显的局限性:

  • 这些包含的搜索路径不是"本地"
  • 文件不得包含","(相当不常见)
  • PATH定义仍然可以超过80个字符

随意添加到此列表中.

编辑
为了更好的可读性,我将以下面的示例风格发布Jonathans评论的解决方案:

#define STRINGIFY(x) #x 
#define PATH(FILE) STRINGIFY(/path/to/FILE) 
#include PATH(foo.h)
Run Code Online (Sandbox Code Playgroud)

该版本在#include <>映射时减轻了版本的"局部性问题"#include ""


Pub*_*bby 9

这为我编译(我基于我记得Boost.PP的工作原理):

#define a() <vec\
tor>

#include a()

int main() {
  std::vector<int> x;
}
Run Code Online (Sandbox Code Playgroud)

只需改变<vector>你的完整路径 - 我认为你不能以你需要的方式连接字符串#include.