宏,内联函数

来源:互联网 发布:淘宝出售假冒违规处罚 编辑:程序博客网 时间:2024/06/02 01:28

Q:why需要这些讨厌的东东?
A:函数对解决大型复杂的问题起到了很大的作用,但是函数调用是需要开销的:调用时需要保护调用者的运行环境、进行参数传递、执行调用指令、为局部变量分配空间以及执行返回指令等。因此函数会使程序执行效率下降,尤其是对一些小函数的频繁调用将使程序的效率有很大的降低。宏和内敛函数是c/c++语言提供的解决上述问题的办法。


  • 宏:用编译预处理命令#define来定义,有四种格式:
    • #define <宏名> <文字串> //预处理时把出现宏名的地方用字符串替换
    • #define <宏名>(<参数表>) <文字串> //宏调用,解决对小函数的调用效率问题
    • #define <宏名> //不替换,用于实现条件编译
    • #undef <宏名> //取消宏定义,此后<宏名>不再有定义、被替换
  • 宏的不足之处:
    • 重复计算:
      eg:#define max(x+1,y+2) (x+1)>(y+2)?(x+1):(x+2)
      不管谁大都会计算两遍。
    • 不进行参数类型检查和转换
    • 不利于代码调试(编译完后,所有的宏都不存在了)

鉴于上述宏的缺点,c++提供了另外一种机制:内联函数。

  • 内联函数:inline int max(int a, int b){} 作用是建议编译程序把该函数的函数体展开到调用点
    **只是建议,编译器有可能不会展开,比如遇到递归函数
    **内联函数具有文件作用域(在a源文件中定义了,在b源文件中extern会报错,因为编译时看不到它的定义)
0 0