内联函数:
如果在声明函数时使用关键字inline,编译时会在调用处直接用函数体进行替换,而不是调用函数
既然是直接替换,那么里面肯定不能有循环语句,switch语句等
注:①内联函数可以避免函数调用,节省参数传递、控制转移等开销
②一般编译器自带优化,对于充分简单的函数,编译器可以自动把函数编译成inline的
带默认参数值的函数:
可以预先设置默认的参数值,调用时如给出实参,则采用实参值,否则采用预先设置的默认参数值
如下程序(代码中有注释)
#include<stdio.h>
inline int Add(int x, int y=1, int z=2);
// 可以预先设置默认的参数值,调用时如给出实参,则采用实参值,否则采用预先设置的默认参数值
/*
有默认参数的形参必须列在形参列表的最右边,即默认参数值的右面不能有无默认值的参数,如下面的定义就是非法的
int Add(int x=2, int y, int z=2) //错误!
{
return x+y+z;
}
*/
int main(void)
{
int d, c;
scanf("%d%d", &c, &d);
printf("%d\n", Add(c, d)); //ans = c+d+2
printf("%d\n", Add(c)); //ans = c+1+2
printf("%d\n", Add(c, d, 100)); //ans = c+d+100
//不允许Add(),这样会编译报错,因为函数中的第一个形参没有给默认值
return 0;
}
int Add(int x, int y, int z) //如果原型声明在函数定义之前,那么默认参数必须且只能在原型声明中给出
{
return x+y+z;
}