Do inline functions have addresses?
Although it's well known, just, since C++17
has inline variable, the implement should be the same.
https://godbolt.org/g/6ZbmYa
Although it's well known, just, since C++17
has inline variable, the implement should be the same.
https://godbolt.org/g/6ZbmYa
#include <stdio.h>
inline void f() {
printf("hello\n");
}
int main() {
f();
void (*g)() = f;
g();
}
Assembly:
.LC0: .string "hello" f(): push rbp mov rbp, rsp mov edi, OFFSET FLAT:.LC0 call puts nop pop rbp ret main: push rbp mov rbp, rsp sub rsp, 16 call f() mov QWORD PTR [rbp-8], OFFSET FLAT:f() mov rax, QWORD PTR [rbp-8] call rax mov eax, 0 leave retAssembly: -O3
.LC0: .string "hello" main: sub rsp, 8 mov edi, OFFSET FLAT:.LC0 call puts mov edi, OFFSET FLAT:.LC0 call puts xor eax, eax add rsp, 8 ret
https://godbolt.org/g/k8m11U
#include <stdio.h>
inline int a{42};
inline void f() {
printf("%i\n",a);
}
int main() {
auto pa = &a;
printf("%i", *pa);
}
Assembly:
a: .long 42 .LC0: .string "%i" main: push rbp mov rbp, rsp sub rsp, 16 mov QWORD PTR [rbp-8], OFFSET FLAT:a mov rax, QWORD PTR [rbp-8] mov eax, DWORD PTR [rax] mov esi, eax mov edi, OFFSET FLAT:.LC0 mov eax, 0 call printf mov eax, 0 leave retAssembly: -O3
.LC0: .string "%i" main: sub rsp, 8 mov esi, DWORD PTR a[rip] mov edi, OFFSET FLAT:.LC0 xor eax, eax call printf xor eax, eax add rsp, 8 ret a: .long 42
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.