有没有办法用不同名称的实现来定义函数?
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.h
和 bar.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
.
我在 header 中有一个函数需要实现才能使其余代码正常工作。通常我会在包含 header 之后在 main.c
中实现这个函数,链接器会清理其余部分。
例如,假设此函数是 void foo(bool);
in foo.h
如果我有另一个函数作为与任务完全匹配的其他代码的一部分实现,假设 void bar(bool);
在某些 bar.h
和 bar.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
.