如何重新映射 C 头文件

3
我正在处理以下问题。
我有一个名为foo.c的文件
它包括foo.h并做一些事情。
棘手的问题是这个。我想将foo.h映射到my_foo.h。因此,当编译器看到foo.h时,它应该转到my_foo.h。
一个可能有效的方法是将my_foo.h包含进foo.h中。还有其他建议吗? 不,我不能在foo.c中包含my_foo.h
提前感谢大家。

2
为什么不重命名 my_foo.h,或者创建一个符号链接?你实际上想做什么? - Beta
1
如果这是可能的,我会感到惊讶。预处理器(负责此事)非常有限。 - Kevin
这是一个 include "foo.h" 还是 include <foo.h>(引号或尖括号)? - Terminality
这是一个包含"foo.h"的语句。 - Bob
3个回答

7

在使用存放“foo.h”的目录之前,修改包含路径以使用由您控制的目录。

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


2

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

但也许您可以创建一个带有以下内容的foo.h

#include "my_foo.h"

1

非常有趣的问题。我很想知道你对它做了什么。

所以,如果你可以控制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文件之间切换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接