C: 指向内联函数的指针



我在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是C标准的误称之一。它的主要含义是能够将函数的定义放在头文件中,而不必在链接时处理"多重定义"问题。

C99和C11中实现您想要实现的目标的官方方法是在头文件中包含inline定义,而不包含static。由于您还需要发出符号,因此需要告诉编译器这应该在哪个编译单元中。这样的实例化可以通过在.c文件中省略inline关键字的声明来完成。

最自然的是,您可以在实际需要符号的地方使用.c文件。

是的,你说得对。当您将指针指向函数时,编译器必须创建一个"独立"版本,在该版本中,代码可以作为普通函数调用。

内联函数的好处是不需要创建调用代码,并且可以使用任何其他优化来集成调用方函数和内联函数。但是,当您需要对函数进行常规调用时(例如,当您获取地址后再调用它时),这些优化就不可能了。

相关内容

  • 没有找到相关文章

最新更新