VC6中编译选项/Gd /Gr /Gz与_stdcall, _cdcel, _fastcall
来源:互联网 发布:人工智能电影天堂 编辑:程序博客网 时间:2024/04/30 03:57
/Gd, /Gr, /Gz选项确定:
- 将函数参数推送到堆栈上的顺序。
- 是由调用方函数还是由被调用函数在调用结束时从堆栈中移除参数。
- 编译器用来标识各个函数的名称修饰约定。
/Gd 为默认设置,对除 C++ 成员函数和标记为 __stdcall 或 __fastcall 的函数以外的所有函数指定 C 调用约定。
/Gr 对除 C++ 成员函数和标记为 __cdecl 或 __stdcall 的函数以外的所有函数指定 __fastcall 调用约定。所有 __fastcall 函数必须具有原型。
/Gz 对除采用的参数个数可变的函数和标记为 __cdecl 或 __fastcall 的函数以外的所有原型 C 函数指定 __stdcall 调用约定。所有 __stdcall 函数必须具有原型。
注意 x86 Specific —>默认情况下,C++ 成员函数当其 this 指针在 ECX 寄存器中传递时使用调用约定。所有其他参数被从右到左推送到堆栈上,被调用例程从堆栈中弹出成员函数的参数。END x86 Specific 显式标记为 __cdecl、__fastcall 或 __stdcall 的成员函数使用指定的调用约定。采用的参数个数可变的成员函数总是使用 __cdecl 调用约定。
__cdecl 细节
对于 C,__cdecl 命名约定使用以下划线 ( _ ) 开头的函数名;不执行任何大小写转换。除非声明为 extern "C",否则 C++ 函数将使用不同的名称修饰方案。
__fastcall 细节
某些 __fastcall 函数参数在寄存器 x86 Specific —> ECX 和 EDX END x86 Specific 中传递,其余参数则被从右到左推送到堆栈上。被调用例程在返回之前从堆栈中弹出这些参数。/Gr 通常减少执行时间。
注意 在对用内联程序集语言编写的任意函数使用 __fastcall 调用约定时,一定要小心。您对寄存器的使用可能与编译器对它们的使用发生冲突。
对于 C,__fastcall 命名约定使用以“at”符 (@) 开头的函数名,后跟函数参数大小(以字节为单位)。不执行任何大小写转换。编译器使用下列命名约定模板:
@function_name@number
注意 Microsoft 不保证不同编译器版本之间的 __fastcall 调用约定的实现相同。例如,16 位编译器与 32 位编译器的实现就不同。
当使用 __fastcall 命名约定时,请使用标准包含文件。否则将获取无法解析的外部引用。
__stdcall 细节
__stdcall 函数的参数被从右到左推送到堆栈上,被调用函数在返回之前从堆栈中弹出这些参数。
对于 C,__stdcall 命名约定使用以下划线 ( _ ) 开头的函数名,后跟“at”符 (@) 和函数参数大小(以字节为单位)。不执行任何大小写转换。编译器使用下列命名约定模板:
_functionname@number
x86 Specific —>
此选项对 C++ 方法和函数的名称修饰无效。除非声明为 extern "C",否则 C++ 方法和函数将使用不同的名称修饰方案。
END x86 Specific
在 Visual Studio 98开发环境中设置此编译器选项
project -> Setting -> C/C++ ->Project Option
- VC6中编译选项/Gd /Gr /Gz与_stdcall, _cdcel, _fastcall
- VC6中编译选项/Gd /Gr /Gz与_stdcall, _cdcel, _fastcall
- _stdcall、_cdecl与_fastcall
- _stdcall,_cdecl,_fastcall区别与联系
- VC6 编译选项/Gz差点儿把Jack搞疯了
- _stdcall _cdecl _fastcall
- _stdcall _cdecl _pascal _fastcall
- _stdcall _cdecl _pascal _fastcall
- _stdcall _cdecl _fastcall
- _cdecl,_stdcall和_fastcall
- _stdcall & _cdecl & _fastcall
- _stdcall,_cdecl,_fastcall区别
- __cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别
- _cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别
- RTTI 需要在编译选项中添加 /GR ,否则typeinfo.h 中的东东没法用
- _stdcall,_cdecl,_fastcall 详细说明
- _stdcall _cdecl _fastcall 详细说明
- _cdecl _stdcall _fastcall _thiscall 简介
- 阿根廷公布世界杯23人名单以及点评
- 图解电脑内外接口和连线
- 巧用重写toString的方法,输出格式的问题留给java帮我解决吧~
- 经济灾难VS发展机遇 3G对中国意味着什么
- ASP.NET直接下载一个文件,而不是在IE中打开它
- VC6中编译选项/Gd /Gr /Gz与_stdcall, _cdcel, _fastcall
- SP公司新人培训教案
- WAP 2.0 VS WEB 2.0
- 一些学习小体悟!!
- 有时候我也想醉一回
- 流行减肥的原因。。。。
- 一匹马和一个女人
- 定制 WinForm DataGrid单元格格式
- 人生致命的八个经典问题