我有一组包含在远离目录中的包含,这意味着包含它们需要长包含,例如:
#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预处理器的工作中连接适合这个吗?
答案 0 :(得分:4)
您无法自定义此类包含文件的搜索路径,但您可以告诉编译器在哪里查找包含文件。许多编译器-I
选项,例如:
gcc -c stuff.c -I/path/to/my/ -I/path/to/other/
如果这使得编译命令太长,您应该编写一个Makefile,或者,如果您在Visual Studio或类似的IDE中工作,则在项目设置中自定义搜索路径。
答案 1 :(得分:3)
编译器将在#include
行(每C 2011 [N1570] 6.10.2 4)进行宏替换,但语义没有完全定义,并且在没有C实现的额外帮助的情况下不能用于连接文件路径组件。因此,所有这些允许您做的是提供完整路径的一些简单替换,例如:
#define MyPath "../../path/to/my/file.h"
#include MyPath
您可以对大多数编译器和操作系统执行的操作是:
-I
开关一样)。#include "FancyStuff/file.h"
等同于../../path/to/FancyStuff
,因为有一个名为FancyStuff
的符号链接指向更长的路径。