zoukankan      html  css  js  c++  java
  • 宏和内联函数

    原文:https://blog.csdn.net/haitaolang/article/details/69945338 

      因为函数调用需要开销(如:保护调用者的运行环境、参数传递、执行调用指令等),所以函数调用会带来程序执行效率的下降,特别是对一些小函数的频繁调用将是程序的效率有很大的降低。

      C++提出了两种解决方法:宏、内联函数。

    1. 宏

        宏是C++编译预处理系统处理的实体。通过预处理命令#define来定义。宏定义的4种格式:

        1)#define口<宏名> <文字串>

      在编译前进行使用文字串进行宏替换

       #define PI 3.14

        2)#define<宏名>(<参数表>)<文字串>

      在编译前进行使用文字串进行宏替换

      #define max(a,b) a>b?a:b

        3)#define口<宏名> 

      只是告诉编译程序该宏名已经被定义,不做任何文字串替换,其用于条件编译

      如:#define OUTPUTFILE

        #ifdef OUTPUTFILE

        //输出到文件的代码

        #endif

        4)#undef口<宏名> 

      用于取消宏名的编译,其后的<宏名>不再进行替换和有定义。

    不足:

      1)重复计算,如max((x+1),(y+2)),因为编译预处理会将其替换成:(((x+1)>(y+2))?(x+1):(y+2)),无论(x+1),(y+2)谁大,都会被计算两次。

      2)其只是进行单纯的文字替换,不进行参数类型检查和转换(如函数调用时,实参和形参类型不一致,若能转换,编译程序会进行自动(隐式)类型转换,否则指出错误)。

      3)不利于一些工具对程序的处理(如C++程序编译后,所有宏都不存在了

    2. 内联函数

      内联函数是指在函数定义中的返回值类型之前加上一个关键字 inline,

    其作用是建议(具体有没有不一定,有些函数加上也不会作为内联函数对待,如递归函数)编译程序把该函数的函数体展开到调用点,这样就避免了函数调用的开销,从而提高了函数调用的效率。

      inline int max(int a,int b)

      {return a>b?a:b;}

      注意:内联函数名具有文件作用域,故一个文件中定义的内联函数对于另一个文件是不可见的。



  • 相关阅读:
    解决Web部署 svg/woff/woff2字体 404错误
    Quartz.NET 2.0 作业调度框架使用
    【转】计算机专业不是学编程
    webstorm 上传代码到git
    关于element-ui在打包后图标不显示的问题
    【转】iOS lame编译 arm64 armv7s armv7 x86_64 i386指令集
    SQL Server存储过程简介
    JQuery EasyUI设置input文本框disabled, readonly属性
    ObjectListView控件介绍及C# Demo实现
    WCF 中wsHttpBinding配置实例程序
  • 原文地址:https://www.cnblogs.com/guojun-junguo/p/9999772.html
Copyright © 2011-2022 走看看