当前位置:首页 > 资讯 > info5 > 正文

调用约定

发表于: 2016-05-07   作者:Sagittarius_Warrior   来源:转载   浏览:
摘要:     本文主要介绍C/C++编译中的调用约定,包括:cdecl、stdcall、VC++编译器、mingw编译器、gcc编译器、g++编译器。一、调用约定的内涵调用约定主要约定两件事:1,参数入栈的顺序;2,函数调用结束后,谁(调用者or被调用者)来恢复栈。二、cdecl1,函数调用时,参从右到左入栈。2,函数调用结束后,调用者负责恢复栈。查看VS工程属性->c/c++->高级,可知VS默认为c

        本文主要介绍C/C++编译中的调用约定,包括:cdecl、stdcall、VC++编译器、mingw编译器、gcc编译器、g++编译器。

一、调用约定的内涵

调用约定主要约定两件事:

1,参数入栈的顺序;

2,函数调用结束后,谁(调用者or被调用者)来恢复栈。


二、cdecl

1,函数调用时,参从右到左入栈。

2,函数调用结束后,调用者负责恢复栈。

查看VS工程属性-> c/c++ -> 高级,可知VS默认为cdecl调用约定。


三、stdcall

1,函数调用时,参从右到左入栈。

2,函数调用结束后,被调用函数返回前,自己负责恢复栈。

Windows API采用stdcall,如关键字WINAPI 、CALLBACK。它不能用于可变参数函数调用。


具体参考博客:调用约定、mingw和mvc转换、msvc mingw dll

调用约定

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
函数调用约定和堆栈 1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入
函数调用约定和堆栈 1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入
1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入式环境有时需要程序员
1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入式环境有时需要程序员
我们经常会讨论这样的问题:什么时候数据存储在堆栈(Stack)中,什么时候数据存储在堆(Heap)中。我们
http://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A 这里描述了在x86芯片架构
int bar( int a, int b, int c, int d, int e, int f, int g ) { int array2[ 7 ]; array2[ 0 ] = a
  _cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些
在Windows编程中,我们经常看到如int WINAPI _tWinMain(HINSTANCE hInstanceExe, PSTR pszCmdLine,
最近在写一些字符串函数的优化,用到x64汇编,我也是第一次接触,故跟大家分享一下。 x86:又名 x32
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号