gpt4 book ai didi

c++ - 内联函数有地址吗?

转载 作者:IT老高 更新时间:2023-10-28 22:16:08 28 4
gpt4 key购买 nike

在“The C++ Programming Language”一书的第 7.1.1 节中,作者指出:

“内联函数仍然有一个唯一的地址,内联函数的静态变量也是如此”

我很困惑。如果我有一个内联函数,那么它就没有地址。这在 C 中也会发生吗?

最佳答案

inline 属性只是对编译器的一个提示,它应该尝试内联你的函数。仍然可以获取函数的地址,在这种情况下,编译器还需要发出非内联版本。

例如:

#include <stdio.h>

inline void f() {
printf("hello\n");
}

int main() {
f();
void (*g)() = f;
g();
}

上面的代码打印hello两次。

我的 gcc 编译器(带有 -O)发出类似这样的代码:

_main:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $20, %esp
call ___i686.get_pc_thunk.bx
"L00000000002$pb":
leal LC0-"L00000000002$pb"(%ebx), %eax
movl %eax, (%esp)
call L_puts$stub ; inlined call to f()
call L__Z1fv$stub ; function pointer call to f() (g is optimised away)
movl $0, %eax
addl $20, %esp
popl %ebx
popl %ebp
ret

如您所见,首先调用了 puts(),然后调用了 L__Z1fv()(这是 f 的错误名称()).

关于c++ - 内联函数有地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318322/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com