C/C++函数调用的几种方式

CA笔试考题,MS面试vender考题,可惜我一次都没做出来:(

The Visual C/C++ compiler provides several ways to call internal and external functions. Understanding these different approaches can help you debug your program and link your code with assembly-language routines.
The following will explain the differences between the calling conventions, how arguments are passed, and how values are returned by functions.

__cdecl:
 the default calling convention for C and C++ programs. Because the stack is cleaned up by the caller, it can do vararg functions. The __cdecl calling convention creates larger executables than __stdcall, because it requires each function call to include stack cleanup code.

ElementImplementation
Argument-passing orderRight to left
Stack-maintenance responsibilityCalling function pops the arguments from the stack
Name-decoration conventionUnderscore character (_) is prefixed to names
Case-translation conventionNo case translation performed

__stdcall:

The __stdcall calling convention is used to call Win32 API functions. The callee cleans the stack, so the compiler makes vararg functions __cdecl. Functions that use this calling convention require a function prototype.
ElementImplementation
Argument-passing orderRight to left.
Argument-passing conventionBy value, unless a pointer or reference type is passed.
Stack-maintenance responsibilityCalled function pops its own arguments from the stack.
Name-decoration conventionAn underscore (_) is prefixed to the name. The name is followed by the at sign (@) followed by the number of bytes (in decimal) in the argument list. Therefore, the function declared as int func( int a, double b ) is decorated as follows: _func@12
Case-translation conventionNone

__fastcall:

The __fastcall calling convention specifies that arguments to functions are to be passed in registers, when possible.

ElementImplementation
Argument-passing orderThe first two DWORD or smaller arguments are passed in ECX and EDX registers; all other arguments are passed right to left.
Stack-maintenance responsibilityCalled function pops the arguments from the stack.
Name-decoration conventionAt sign (@) is prefixed to names; an at sign followed by the number of bytes (in decimal) in the parameter list is suffixed to names.
Case-translation conventionNo case translation performed.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值