【问题标题】:How to remap a c header file如何重新映射c头文件
【发布时间】:2013-06-07 13:23:51
【问题描述】:

我正在为以下问题困扰自己。

我有一个文件 foo.c

包含 foo.h 并做一些事情。

棘手的是这个。我想将 foo.h 重新映射到 my_foo.h。因此,当编译器看到 foo.h 时,它应该转到 my_foo.h。

一个可行的方法是将 my_foo.h 包含到 foo.h 中。还有其他建议吗? 不,我不能包含在 foo.c my_foo.h 中

提前谢谢大家

【问题讨论】:

  • 为什么不重命名my_foo.h,或者创建一个符号链接?你到底想做什么?
  • 如果这是可能的,我会感到惊讶。预处理器(处理这个)非常有限。
  • 这是一个包含“foo.h”还是包含 (引号或括号)?
  • 它是一个包含“foo.h”

标签: c remap


【解决方案1】:

在使用包含“foo.h”的目录之前,更改包含路径以使用您控制的目录

在您控制的目录中创建一个名为“foo.h”的符号链接,指向“my_foo.h”作为目标

【讨论】:

    【解决方案2】:

    根据您使用的系统,您可能没有符号链接。

    但也许你可以创建一个foo.h,内容如下:

    #include "my_foo.h"
    

    【讨论】:

      【解决方案3】:

      多么有趣的问题。我很想知道你在用它做什么。

      因此,如果您可以控制foo.h,这里有一个变体,用于在 Linux 内核中的内核代码和用户代码之间共享头文件时使用。

      /* File: foo.h */
      #ifdef USE_MY_FOO_H
          #include <my_foo.h>
      #else
          #define OVERRIDABLE_FOO_MACRO do { stuff() } while(0)
      
          int overridable_foo_func();
      #endif
      
      int not_overridable_foo_func();
      

      然后在你的 Makefile 中

      /* File: Makefile */
      default: foo.c foo.h
          $(CC) foo.c -o foo
      
      use_my_foo_h: foo.c foo.h my_foo.h
          $(CC) -DUSE_MY_FOO_H foo.c -o foo
      

      顺便说一句,这并不是形成 Makefile 的好方法,它只是演示了可用于在两个 foo.h 文件之间切换的编译器命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-09
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 2018-04-10
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多