有没有办法用不同名称的实现来定义函数?

Is there a way to define a function with an implementation with a different name?

我在 header 中有一个函数需要实现才能使其余代码正常工作。通常我会在包含 header 之后在 main.c 中实现这个函数,链接器会清理其余部分。

例如,假设此函数是 void foo(bool); in foo.h

如果我有另一个函数作为与任务完全匹配的其他代码的一部分实现,假设 void bar(bool); 在某些 bar.hbar.c

中实现

我通常会通过包含 bar.h 和做

来将两者联系起来
void foo(bool var) {
    bar(var);
}

如果有很多这些,基本上就是很多一行函数,告诉函数调用不同的函数。

是否有不同的方法来完成此操作?

void foo(bool var) {
    bar(var);
}

函数要么是全局的,要么不是。你必须做出决定;你不能两者兼得。

如果它只是一个 header 中的包装器,那么您可以将其设为静态内联:

// bar.h
static inline void foo (bool var)
{
    bar (var);
}

应该清楚的是,您不能将它与 foo.h 中的不同定义/声明一起使用。

如果您只是想让一个名为 foo 的函数使用 bar 作为程序集名称,那么您可以使用 GNU-C 中的以下 C-extension:

// bar.h
void foo (bool) __asm ("bar");

这意味着 bar 将是 foo 的程序集名称。这可能会避免额外的调用步骤。当然,这也不能与 foo 的冲突定义/声明一起使用。另请注意,您可能必须调整程序集名称,例如 i386 平台通常使用前导 _(下划线),因此您必须使用程序集名称 _bar。对于 C++,您需要损坏的名称。

底线:在每个编译单元(模块)中你必须决定什么 您要使用的 foo 的实现,并根据它包括 foo.h 或冲突的 bar.h.