1.函数默认值参数
- 在函数声明或者定义的时候,给定默认参数,如果实参传递时候,不给形参传值,则会按照默认值传值
- 函数参数的默认值是在编译期生成指令时候直接生成入参指令
- 函数参数的默认值只能传递常量,默认值参数只能从右向左依次赋值,不能跳过
- 函数的默认值参数在同一作用域只能赋值一次,不能重复赋值
- 因为函数参数的默认值是在编译期带入的,所以函数的默认值只在本文件生效
2. Inline(内联函数)
- 内联函数:(Release版本)在调用内联函数时候,该函数会在调用点将代码展开(编译时期),内联函数在函数调用时侯没有栈帧的开辟等等,在Debug版本下调用和正常函数调用相同
- 由于内联函数在编译期展开,编译期无法获取变量的值,而递归函数的终止条件一定需要有变量参与,所以递归函数不可能被处理成内联函数
- inline只是对系统的建议,建议将该函数处理为内联
3. 符号
数据&指令
- 所有的数据都会生成符号,指令中只有函数名会生成符号
- 符号:全局符号(global)- 所有文件可见
局部符号(local)- 只有本文件可见 - Inline函数在debug版本生成的是local符号,如果处理为内联之后在Release版本不生成符号,直接在调用点展开
3. 宏函数&static函数&内联函数&普通函数
- 宏函数:预编译时期在调用点展开,无法调试,没有类型安全校验,没有栈帧开辟,单文件可见,不生成符号
- static函数:不展开,可以调试,有类型安全校验,有栈帧开辟,单文件可见,生成符号
- 内联函数:debug版本不展开,release版本在调用点展开,可以调试,有类型安全校验,debug版本有类型安全校验,release版本没有栈帧开辟,单文件可见,debug版本生成符号,release版本不生成符号
- 普通函数:不展开,可以调试,有类型安全校验,有栈帧开辟,多文件可见,生成global符号
4. 函数重载
- 概念:函数名相同,参数列表不同
- C语言生成函数符号依赖函数名,C++产生函数符号依赖函数名和参数列表(返回值不受影响)
- 函数重载在编译时期决定调用哪个函数——静多态的一种
C语言和C++的相互调用
Extern:使用c语言方式编译代码
类型转换优先级