【发布时间】:2020-05-22 10:02:59
【问题描述】:
我有两个同名的函数,想在我的应用程序中使用它。
我参考了各种答案,例如 here 和这里,但无法得到明确的解决方案。
我有以下功能
// xxxx_input.h
int8_t input_system_init(InputParams params);
int8_t input_system_easy_load(uint32_t interval_ms);
// yyyy_input.h
int8_t input_system_init(InputParams params);
int8_t input_system_easy_load(uint32_t interval_ms);
原因有两个文件是xxxx_input 和yyyy_input 在内部工作方式不同。
修改函数并不容易,因为代码是由外部提供的,我们必须保留 xxxx_input 文件。
我们可以做的是修改yyyy_input.h,但是像input_system_easy_load这样的函数要保持一致,因为它们是从不同的地方调用的。
有没有办法达到同样的效果?
我尝试将xxxx_input 替换为yyyy_input.h,但由于包含目录已经包含相同的函数,它会报错。
input_system_init 多重定义(由 xxxx_input.o 和 yyyy_input.o)。
【问题讨论】:
-
不能在同一个编译单元中同时使用两者。
-
所以我建议更改名称,即使这很麻烦。
-
C 函数名称总是在全局范围内结束(如果需要从不同的翻译单元调用它们),因此如果您需要同时构建两者,则需要重命名其中一个。
-
鉴于您手头的资料,编译两个单独的二进制文件并一个接一个地运行它们(可能通过相同的脚本/作业)是更好的选择,还是这些工作流真正依赖于每个其他的?
-
@possum 你认为这比重命名其中一个更容易吗? ^^
标签: c