linux cdecl命令,Re: GCC 有没有 stdcall, fastcall, cdecl 等的区分?

stdcall和cdecl指定的是参数传递方式,跟地址空间是32位还是64位没有关系

stdcall参数传递方式,参数是反向入栈,被调用子程序

负责恢复堆栈指针。

cdecl参数传递方式,参数反向入栈,调用者负责恢复堆栈。这样可以

实现变长参数调用(如在printf中)

只要是使用堆栈的体系,应该都有这个参数传递方式的问题。也许别的平台在调用

方式上都比较一致,而不像x86那么混乱?

比如调用sub(a,b)

[stdcall]

main:

...

push b   

push a

call sub

...

sub:

...

...

...

ret 16    

[cdecl]

main:

...

push b   

push a

call sub

add sp, 16 

...

sub:

...

...

...

ret

*****

fastcall应该是要求用寄存器传参数,但实现和体系有关。这些关键字在

实现跨语言的调用时有用。windows api用的都是stdcall, 如果

搞错了传参方式,参数就无法正确传递。

另外,可以看这个地方,介绍了各种调用方式:

http://www.borland.com/techpubs/delphi/delphi5/oplg/procfunc.html

【 在 intron (内含子) 的大作中提到: 】

: stdcall,fastcall一定没有。

: 因为UNIX下都是32位线性指针,或是新型的64位指针。

: cdecl也没有。参数传送顺序均C语言顺序,即使是UNIX下的pascal,basic也是如此。

: 这个大概与当初UNIX是用C建造的历史有关。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值