VC调试时如何查看函数返回值

所谓C/C++函数调用规范,是指进行一次函数调用所采用的传递参数的方法,返回值的处理以及调用堆栈的清理。

VC++集成调试环境中提供了如下三种调用规范,它们的参数入栈方式都是自右向左的,32位整型的返回值的处理也都是将返回值放到寄存器eax中,如果返回值是64位整型的,就用edx:eax。浮点返回值则放在浮点寄存器ST(0)中。这三种调用规范的区别主要在是函数堆栈的处理上。

  • _cdecl:由调用者进行堆栈清理。优点是可以实现变参函数。缺点是每一次函数调用,调用者都要额外执行一条进行堆栈清理的代码,程序文件偏大一些。
  • _stdcall:被调用者自己清理函数所用堆栈。优点是调用者无须清理堆栈了,程序文件会小一些。缺点是无法实现变参函数。(所谓变参函数,即类似与printf之类的函数)。
  • _fastcall:它与_stdcall的仅有的区别是函数的前两个参数由寄存器ecx,edx传递,CPU寄存器的读写速度是最快的,所以其效率比上面两种高!windows的内核广泛采用了这种调用规范。

注意:调用者与被调用者所采用的调用规范必须得一致,否则有可能会出现莫名其妙的错误。也就是说,如果你的被调用的函数是_stdcall格式的,那么调用者也必须是_stdcall格式。为了让代码更标准,在其他类型的C++编译器也能够运行,还是将微软的APIENTRY改成_stdcall吧。

Visual C++.net 2003中可以对整个项目或者项目中的某些文件设置C/C++默认调用规范,VC++编译器的默认设置是_cdecl的。如果你要修改该默认值,可以在项目属性中进行设置(自个在项目属性对话框中找去吧,现在用Linux,没有VC了,无法抓图)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值