我在标头中有一个函数,其余代码才能正常运行。通常,在包含标题之后,我将在main.c
中实现此功能,链接器将清除其余的内容。
例如,假设此函数是void foo(bool);
中的foo.h
如果我在与任务完全匹配的其他代码中实现了另一个功能,则可以假设void bar(bool);
是在某些bar.h
和bar.c
中实现的
我通常会通过包括bar.h
和这样做
void foo(bool var) {
bar(var);
}
如果有很多的话,基本上就是很多单行函数来告诉函数调用另一个函数。
有其他方法可以做到这一点吗?
答案 0 :(得分:1)
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
。