代码之家  ›  专栏  ›  技术社区  ›  edgar.holleis

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

  •  0
  • edgar.holleis  · 技术社区  · 16 年前

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

    #include <some/file.h>
    

    在每个生成的源文件的顶部。头已被重命名。尽管强制编译器(GCC)使用 -include new/header.h ,从每个生成的文件中删除上述指令会使生成过程复杂化。

    有没有办法让海湾合作委员会忽略 some/file.h ?

    5 回复  |  直到 8 年前
        1
  •  5
  •   Joe    16 年前

    不,你可以发布你生成的文件-我说:不!!!!

    或者,您只需将“.”添加到您的系统包含目录(或者无论您的本地包含路径是什么-确保它也是一个<gt;系统包含路径)。

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

    我想有一些原因可能不起作用-因为它看起来像是在使用之前要做的更直接和可理解的事情-包括。尤其是因为你可以通过注释传递文件来解释发生了什么。

        2
  •  5
  •   Bombe    16 年前

    替换 some/file.h 文件为空。

        3
  •  1
  •   FreeMemory    16 年前

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

        4
  •  0
  •   daniel    16 年前

    试用使用 preprocessor 指令,如ifdef和gcc -dSt=值 命令行标志。

    例如,如果使用 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__) */
    
    

    它将使用“some/file.h”编译,如果两者都有 STDC 并且需要定义_stdc符号。另外,您的头文件可能包含适当的指令,以避免同一文件中包含多个内容:

    
    
    #ifndef MY_HEADER_FILE
    #define MY_HEADER_FILE 1
    
    /* your C declarations here */
    
    #endif /* MY_HEADER_FILE */
    
    

    而且,你可以 gcc preprocessor 手册。

        5
  •  0
  •   luiscubal    16 年前
    #include <some/file.h>
    

    可能开始时

    #ifndef _FILE_H_
    #define _FILE_H_
    

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