Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使C预处理器忽略某些#include指令_C_Gcc_Include_Build Process_C Preprocessor - Fatal编程技术网

使C预处理器忽略某些#include指令

使C预处理器忽略某些#include指令,c,gcc,include,build-process,c-preprocessor,C,Gcc,Include,Build Process,C Preprocessor,我在这里使用一个解析器生成器,不幸的是,它坚持将 #include <some/file.h> #包括 在每个生成的源文件的顶部。标题很早就被重命名了。虽然强制编译器(gcc)使用带有-include new/header.h的新头是没有问题的,但是从每个生成的文件中删除上述指令会使构建过程复杂化 有没有办法告诉gcc忽略some/file.h?用一个空文件替换some/file.h。没有。你可以对生成的文件进行后期处理-我说:没有 或者,您可以将“.”添加到您的系统包含目录中(

我在这里使用一个解析器生成器,不幸的是,它坚持将

#include <some/file.h>
#包括
在每个生成的源文件的顶部。标题很早就被重命名了。虽然强制编译器(gcc)使用带有
-include new/header.h
的新头是没有问题的,但是从每个生成的文件中删除上述指令会使构建过程复杂化


有没有办法告诉gcc忽略
some/file.h

用一个空文件替换
some/file.h

没有。你可以对生成的文件进行后期处理-我说:没有

或者,您可以将“.”添加到您的系统包含目录中(或者本地包含路径是什么,请确保它也是一个系统包含路径)

然后创建一个“some”目录,并在其中粘贴您自己的永久性“file.h”,其中有一行是#include,然后去掉您的-include


我想可能有一些原因不起作用-因为在使用之前,这似乎是更直接和更容易理解的事情-包括。尤其是因为您可以对传递文件进行注释以解释发生的情况。

为什么不将some/file.h符号链接到new/header.h,并删除-include指令

#include <some/file.h>
如果是这样,只需在
#include
命令之前添加
#define(定义)FILE(H)
,它应该忽略它。 不过,我不确定这是否是最好的解决方案。

尝试使用类似于#if and#ifdef和gcc-DSYMBOL=value命令行标志的指令

在本例中,如果您使用gcc-DREQUIRE_STDC=1-o myfile.o myfile.c进行编译,并且您的.c文件包含:



#if defined(REQUIRE_STDC) && defined(__STDC__)
#include "some/file.h"
#else
#include "another/file.h"
#endif /* defined(REQUIRE_STDC) && defined(__STDC__) */

如果同时定义了STDC和需要\u STDC符号,则将使用“some/file.h”进行编译。此外,您的标题可能包含适当的指令,以避免同一文件包含多个内容:



#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */


此外,您还可以查看手册。

否,因为它是一个系统标题。但是有了-I,无论如何都有可能让gcc找到它。谢谢。因为它曾经是/usr/include中的一个系统头。仅仅为了编译一些应用程序,不需要修改/usr/include。这对于普通的源文件是可能的。在我的例子中,源是动态生成的,我没有必要控制它的结果输出。


#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */