函数调用流程
- 宏函数
- 在一定程度上会比普通函数效率高,普通函数会有入栈和出栈的时间开销------------------------------------------------------ps:#difine add(x,y) x+y 在这里要注意,在运算过程当中,这里的x+y会直接运算而不是(x+y)!!!
- 将比较频繁短小的函数 写为宏函数,直接跑源码
- 优点: 以空间换时间
- 调用惯例
- 主调函数和被调函数都必须有一致的约定,才可以正确的调用函数,这个约定我们称为调用惯例---------------------ps:这里强调的使调用函数,传递规则顺序以及传递的内容存储空间
- 调用惯例包含的内容: 出栈方、参数的传入顺序、函数名称的修饰
- c和c++下默认的调用惯例为 cdecl=----从右往左
相关的模型有:
调用惯例 | 出栈方 | 参数传递 | 名字修饰 |
cdecl | 函数调用方 | 从右至左参数入栈 | 下划线+函数名 |
stdcall | 函数本身 | 从右至左参数入栈 | 下划线+函数名+@+参数字节数 |
fastcall | 函数本身 | 前两个参数由寄存器传递,其余参数通过堆栈传递。 | @+函数名+@+参数的字节数 |
pascal | 函数本身 | 从左至右参数入栈 | 较为复杂,参见相关文档 |
eg:
int _cdecl func(int a,int b);
注意: _cdecl不是标准的关键字,在不同的编译器里可能有不同的写法,例如gcc里就不存在_cdecl这样的关键字,而是使用__attribute__((cdecl)).
引用学习c语言提高