【发布时间】:2012-02-11 17:28:19
【问题描述】:
我在 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只是对编译器的一个建议 -
它也可以推断它可以简单地将
frobnicate直接内联到blahBlahBlah并跳过中间人。没有指向frobnicate的指针以允许它从另一个翻译单元使用的方式存储,因此frobnicate不需要存在于程序集输出中。
标签: c function-pointers inline-functions