我在标头中有一个函数,其余代码才能实现。通常,main.c
在包含标头之后,我将在其中实现此功能,链接器将清除其余部分。
例如,假设此函数void foo(bool);
位于foo.h
如果我有另一个功能实现的,任务相匹配一些其他的代码部分完全相同比方说,void bar(bool);
在一些实施bar.h
和bar.c
我通常会通过包括bar.h
和做这两种方式将两者联系起来
void foo(bool var) {
bar(var);
}
如果有很多的话,基本上就是很多单行函数来告诉函数调用另一个函数。
有没有其他方法可以做到这一点?
void foo(bool var) { bar(var); }
该函数要么是全局函数,要么不是全局函数。您必须做出决定;你们不能两者兼得。
如果它只是头文件中的包装器,则可以使其静态内联:
// bar.h
static inline void foo (bool var)
{
bar (var);
}
应该清楚的是,您不能与一起使用不同的定义/声明foo.h
。
如果你只是想这就是所谓的功能foo
来使用bar
的程序集名称,那么您可以使用来自GNU-C以下C的扩展:
// bar.h
void foo (bool) __asm ("bar");
这意味着bar
将是的程序集名称foo
。这可以避免额外的呼叫步骤。当然,这也不能与的定义/声明冲突foo
。还要注意,您可能必须调整程序集名称,例如,i386平台通常使用前导_
(下划线),以便您必须使用程序集名称_bar
。对于C ++,您需要使用乱码。
底线:在每个编译单元(模块)中,您必须决定foo
要使用的实现方式,并取决于此实现,包括foo.h
或冲突bar.h
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句