繁体   English   中英

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

[英]Make the C preprocessor ignore certain #include directives

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

#include <some/file.h>

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

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

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

不。您可以对生成的文件进行后处理-我说:不!

或者,您可以仅添加“。” 到系统包含目录(或本地包含路径的任何内容-确保它也是<>系统包含路径)。

然后创建一个“ some”目录,并将自己的永久“ file.h”粘贴在其中,其中包含#include的一行,并摆脱-include。

我猜有某些原因可能无法正常工作-因为在使用-include之前,这似乎是一件更直接,更容易理解的事情。 特别是因为您可以注释传递文件以说明发生了什么。

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

#include <some/file.h>

可能开始像

#ifndef _FILE_H_
#define _FILE_H_

如果是这样,只需在#include命令之前添加#define _FILE_H_ ,它应该忽略它。 不过,我不确定这是否是最佳解决方案。

尝试使用预处理程序指令,例如#if和#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符号REQUIRE_STDC它将编译使用“一些/ file.h”。 另外,您的标头可能包含正确的指令,以避免同一文件被多个包含:



#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */

另外,您可以阅读gcc预处理程序手册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM