【发布时间】:2012-09-25 21:23:10
【问题描述】:
我希望有一种方法可以将 #include 指令拆分为两行,这样我的代码就可以符合每行 80 个字符的要求,尽管需要很长的包含路径。
除了扩展编译器的搜索路径,我该如何管理呢?有没有办法将我很长的路径字符串分成两行?
“#define”宏扩展显然发生在#include 扩展之后,所以这些不起作用:
#define BIGPATH "..."
#include BIGPATH ## "/foo.c"
#include "BIGPATH/foo.c"
#include BIGPATH"/foo.c"
我也试过
#include "foo" ##
"bar"
和
#include "foo" \
"bar"
无济于事。也许我想要的不可能?帮助我,stackoverflow kenobi,你是我唯一的希望。
回答:在下面建议的答案的基础上,以下是对我真正有用的方法:
#define STRINGIFY(x) #x
#define PATH(path) STRINGIFY(/my/very/long/path)
#include PATH(foo.h)
#undef PATH
#undef STRINGIFY
【问题讨论】:
-
将您的目标目录符号链接到适合一行的内容。或者,设置包含路径,以便您只需要文件名,而不是整个路径。 (而且你不能用预处理器做你想做的事,它不会预处理预处理器指令。)
-
宏扩展发生在包含扩展之前,否则
#include SOME_ARG_FROM_USER(例如在 Boost.Preprocessor 中)将不起作用。 -
长的绝对固定路径很难看,最好将它作为参数传递给预处理器,它会更加灵活,并且在路径挂起的那天给你带来更少的麻烦......例如检查 gcc 的 -I 选项
-
Avakar 对其中一个答案的评论暗示您的第三个答案几乎是正确的 - 尝试
#include "foo\(换行,下一行没有前面的空格)bar",并尽可能发布如果有,请回答。
标签: c include c-preprocessor stringification