我有一个在H文件中定义的static inline
函数,在C文件的某个位置,我正在将指针分配给该函数,类似于以下内容:
foo.h:
static inline void frobnicate(void) {
// frobs something.
}
foo.c
#include "foo.h"
void execute(void (*func)(void) ) {
func();
}
void blahBlahBlah(void) {
execute(frobnicate);
}
bar.c
#include "foo.h"
// ...
frobnicate();
所以我认为这里会发生的是:编译器将内联来自bar.c的对frobnicate的调用,但在foo.c中,它实际上必须创建一个函数来实现frobnicate,以便可以有一个有效的指向它的指针。
有人可以确认我的理解是否准确,并纠正我吗?
inline
只是对编译器的一个「建议」。 - Seth Carnegiefrobnicate
内联到blahBlahBlah
中,跳过中间人。没有指向frobnicate
的指针被存储在允许从另一个翻译单元使用它的方式中,因此frobnicate
不需要存在于汇编输出中。 - Petr Skocik