Do inline functions have addresses?

后端 未结 6 1716
情深已故
情深已故 2020-12-14 19:05

In section 7.1.1 of the book \"The C++ Programming Language\" the author states:

\"inline function still has a unique address and so do the static variables of an in

6条回答
  •  没有蜡笔的小新
    2020-12-14 19:44

    The inline attribute is just a hint to the compiler that it should try to inline your function. It's still possible to take the address of the function, and in that case the compiler will also need to emit a non-inline version.

    For example:

    #include 
    
    inline void f() {
        printf("hello\n");
    }
    
    int main() {
        f();
        void (*g)() = f;
        g();
    }
    

    The above code prints hello twice.

    My gcc compiler (with -O) emits code something like this:

    _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
    

    As you can see, there is first a call to puts() and then a call to L__Z1fv() (which is the mangled name of f()).

提交回复
热议问题