包含路径的预处理器并置

我有一组包含在远离目录中的包含,这意味着包含它们需要长包含,例如:

#include "../../Path/to/my/file.h" 

我有多个这样的东西变得有点不方便所以我想我可以使用#define作为目录路径,然后连接我需要的文件名,即

 #define DIR "../../Path/to/my/" #define FILE1 "file.h" #define FILE2 "anotherFile.h" #include DIR FILE1 // should end up same as line in first example after pre-proc 

然而,这不起作用…无论如何在C预处理器的工作中连接适合这个?

您无法自定义此类包含文件的搜索路径,但您可以告诉编译器在哪里查找包含文件。 许多编译器-I选择,例如:

 gcc -c stuff.c -I/path/to/my/ -I/path/to/other/ 

如果这使得编译命令太长,则应编写Makefile,或者,如果您在Visual Studio或类似的IDE中工作,则在项目设置中自定义搜索路径。

编译器将在#include行上进行宏替换(根据C 2011 [N1570] 6.10.2 4 ),但语义没有完全定义,并且在没有C实现的额外帮助的情况下不能用于连接文件路径组件。 因此,所有这些允许您做的是提供完整路径的一些简单替换,例如:

 #define MyPath "../../path/to/my/file.h" #include MyPath 

您可以对大多数编译器和操作系统执行的操作是:

  • 告诉编译器搜索包含文件的目录(与GCC的-I开关一样)。
  • 创建指向其他目录的符号链接,以便#include "FancyStuff/file.h"等同于../../path/to/FancyStuff因为有一个名为FancyStuff的符号链接指向更长的路径。