C:指向内联函数的指针

标签 c function-pointers inline-functions

我在 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/

相关文章:

c - 发出 128 位整数数组中的清除位

客户端/服务器打印数组并写回

c++ - 使用指向函数的指针作为模板参数

c - 如何在 C 函数中将宏作为参数传递?

c - 有没有办法在 .c 文件而不是 .h 文件中定义 C 内联函数?

c - 循环直到用户输入一个整数,但如果终端上不存在整数则跳过读入

c - 如何在内核源代码中设置断点以获取 fork.c 中函数的地址?

函数指针的正确使用

C++ 函数曾经工作,现在返回 0xfdfdfdfd

C++ 内联函数和上下文特定优化