c语言内联函数测试,关于C语言内联函数

今天对内联函数做了一个简单的测试,但是编译器貌似并没有对内联函数进行展开。测试如下:

inline.c

inline int test(int i)

{

return i+1;

}

int main()

{

int j=1;

j=test(j);

return 0;

}

gcc -S inline.c -o inline.s

查看inline.s部分内容如下:

main:

.LFB1:

.cfi_startproc

pushl   %ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8

movl    %esp, %ebp

.cfi_def_cfa_register 5

subl    $20, %esp

movl    $1, -4(%ebp)

movl    -4(%ebp), %eax

movl    %eax, (%esp)

call    test

movl    %eax, -4(%ebp)

movl    $0, %eax

leave

.cfi_restore 5

.cfi_def_cfa 4, 4

ret

可以看到,汇编代码中call test 表示test函数是作为普通函数被调用,而非内联函数展开。 求达人解答 谢谢

|

inline是为了优化而生的, 用gcc -O才能看到效果。

inline int test(int i)

{

return i+1;

}

int main(int argc, char *argv[])

{

int j=argc;

j=test(j);

printf("%dn", j);

return 0;

}

.file"inline.c"

.text

.globl _test

.def_test;.scl2;.type32;.endef

_test:

pushl%ebp

movl%esp, %ebp

movl8(%ebp), %eax

incl%eax

popl%ebp

ret

.def___main;.scl2;.type32;.endef

.section .rdata,"dr"

LC0:

.ascii "%d12"

.text

.globl _main

.def_main;.scl2;.type32;.endef

_main:

pushl%ebp

movl%esp, %ebp

subl$8, %esp

andl$-16, %esp

movl$16, %eax

call__alloca

call___main

movl8(%ebp), %eax

incl%eax

movl%eax, 4(%esp)

movl$LC0, (%esp)

call_printf

movl$0, %eax

leave

ret

.def_printf;.scl2;.type32;.endef

|

内联不内联由编译器决定.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值