代码改变世界

随笔档案-2013年08月

(转)C/C++函数调用约定

2013-08-14 21:15 by 虫虫与贝贝, 185 阅读, 收藏,
摘要: 关于C/C++函数调用约定,大多数时候并不会影响程序逻辑,但遇到跨语言编程时,了解一下还是有好处的。VC中默认调用是__cdecl方式,Windows API使用__stdcall调用方式,在DLL导出函数中,为了跟Windows API保持一致,建议使用__stdcall方式。调用约定跟堆栈清除密切相关。如果写一个汇编函数,给C/C++调用,在__cdecl方式下,则汇编函数无需清除堆栈,在__stdcall方式下,汇编函数需要在返回(RET)之前恢复堆栈。C语言有__cdecl、__stdcall、__fastcall、naked、__pascal。C++语言有__cdecl、__stdc 阅读全文

(转)c语言中可变参数函数的设计

2013-08-14 20:49 by 虫虫与贝贝, 468 阅读, 收藏,
摘要: 1,首先,怎么得到参数的值。对于一般的函数,我们可以通过参数对应在参数列表里的标识符来得到。但是参数可变函数那些可变的参数是没有参数标识符的,它只有“…”,所以通过标识符来得到是不可能的,我们只有另辟途径。我们知道函数调用时都会分配栈空间,而函数调用机制中的栈结构如下图所示: | ...... | ------------------ | 参数2 | ------------------ | 参数1 | ------------------ | 返回地址 | ------------------ |调用函数运行状态| ------------------可见,参数是连续存储在栈里面的,那么也就 阅读全文