我在 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);
}
酒吧.c
#include "foo.h"
// ...
frobnicate();
所以我认为这里会发生的是编译器将从 bar.c 内联调用 frobnicate
,但在 foo.c 中,它实际上必须创建一个函数来实现 frobnicate
,以便它可以有一个指向它的工作指针。
谁能证实我的理解是否准确,并纠正我?
最佳答案
inline
是 C 标准的误称之一。它的主要含义是能够将一个函数的定义放在头文件中,而不必在链接时处理“多重定义”问题。
在 C99 和 C11 中实现你想要实现的官方方法是在头文件中有 inline
定义,没有 static
。由于您还需要发出符号,因此您需要告诉编译器这应该在哪个编译单元中。这样的实例化可以通过在该 .c 文件中省略 inline
关键字的声明来完成。
最自然地,您可以在实际需要符号的地方使用 .c 文件。
关于C:指向内联函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885665/