宏函数的优缺点:
优点:性能高,代码展开在调用处
缺点:因为本质上是文本替换,所以一不注意就会出现问题
代码:
1 #define unsafe(i) ((i)>0?((i)+1):((i)-1)
2 //使用宏函数,在变量加(),以及在整个宏表达式都加(),来避免不必要的运算符优先级问题
3 int f(int i){
4
5 };
6 void userCode(int x){
7 int ans;
8 ans = unsafe(x++);//错误,x被增加两次
9 ans = unsafe(f(++x));//危险,f()被调用两次//通过f的函数指针跳转到f这个函数
10 }
调用函数:压入函数栈帧,压入所有实参参数,压入返回值地址,再跳转到新函数对应新的语句。
函数结束:根据返回值,跳转回原先调用的地方