gpt4 book ai didi

c - 在现有 C 库中重新定义宏

转载 作者:太空狗 更新时间:2023-10-29 15:32:11 24 4
gpt4 key购买 nike

假设我有一些代码如下:

L - A common library (source) (via svn:extern)
X - My project
Y - A static library (source) (via svn:extern) compiled with X and depends on L

内部 L X 中的代码中有一个宏和 Y

#define FOO() printf("Hello World\n")

我想改成

#define FOO() printf("===> Hello World <===")

现在,我知道在我的代码中,X ,我能做到:

#ifdef FOO
#undef FOO
#define FOO() printf("===> Hello World <===")
#endif

对于 X 会很好用, 但对 Y 中的任何代码没有帮助和编译。我可以修改 YL的代码在本地,但我无法检查我的修改,因为它可能会破坏其他项目对 FOO 的期望做。

是否可以通过命令行修改宏,有点像-D一样徒劳?如果是这样,那么我可以更改我的 Makefile 和任何 checkout X 的行为将可以访问改进的 FOO .使用 -D 的问题是它将定义宏函数之前 XY #include L 的宏,然后将导致宏重新定义警告(随后不是我想要的宏)。

最佳答案

假设L使用header guards,你可以做类似的事情

l_improved.h

#ifndef L_IMPROVED_H
#define L_IMPROVED_H

#include "L.h"

#ifdef FOO
#undef FOO
#define FOO() printf("===> Hello World <===");
#endif

#endif

然后添加:

-include l_improved.h

在你的 gcc 编译器标志中。

来自 gcc Preprocessor-Options :

-include file:处理文件,就好像#include "file"出现在主源文件的第一行。

如果您使用其他编译器,标志可能会有所不同。

关于c - 在现有 C 库中重新定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33152486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com