• C语言中宏定义与C++中的内联函数


    一,宏定义:在预处理的时候把宏定义的内容替换到代码中,正常编译。

    1,无参数宏定义和有参数宏定义

        (1)宏定义不能加分号,比如:#define  PI 3.24;错的,#define  PI 3.24对的。

        (2)带参数宏定义,注意参数用括号包起来,因为参数有可能表达式;宏名和形参之间不能有空格。

        (3)带参数宏定义和带参数的函数,在使用时候有差别的。

               带参数函数示例:

          
    #include <stdio.h>
    
    int SQ(int);
    
    int main()
    {
     int i=1;
     while(i<=5)
      printf("%d
    ",SQ(i++));
     return 0;
    }
    
    int SQ(int y)
    {
     return((y)*(y));
    }
    View Code

             带参数宏定义示例:

          
    #define SQ(y) ((y)*(y))
    
    #include <stdio.h>
    
    int main()
    {
     int i=1;
     while(i<=5)
      printf("%d
    ",SQ(i++));
     return 0;
     }
    View Code

    两个程序运行结果是不同的,分析知:使用函数时候,i值传给函数,return((i)*(i));;而宏定义直接替换,把i++传递给宏定义函数,SQ(i++) ((i++)*(i++))。因此结果不同。

         (4)宏定义中"","#","#@"和"##", 在用#define 定义时 , 斜杠("")是用来续行的,"#"用来把参数转换成字符串,是给参数加上双引号。"##"则用来连接前后两个参数,把它们变成一个字符串,"#@"是给参数加上单引号。下面的例子会使您很容易理解。

    #define Conn(x,y) x##y
    #define ToChar(a) #@a
    #define ToString(x) #x

    二,内联函数:在编译阶段直接将内联函数内容插入目标代码,因此不用中断调用函数,加快程序执行速度,但是在每个调用函数地方用函数内容替换,加大空间的开销。

    1,内联函数关键字是inline。inline是“定义的关键字”,而不是“声明的关键字”。

    以下方式不对:

    inline void Foo(int x, int y);  // inline仅与函数声明放在一起 
    void Foo(int x, int y) 
    { 
    … 
    } 
    View Code

    以下方式正确:

    void Foo(int x, int y);  
    inline void Foo(int x, int y) // inline与函数定义体放在一起 
    { 
    … 
    } 
    View Code

    2,什么情况下用内联函数

    (1)一个函数不断被重复调用。

    (2)函数只有简单几行,且函数内不包含循环语句(for、while),开关语句(switch)。

    3,在类中,类成员函数在类中声明定义时候,自动把成员函数设为内联函数(此函数无循环语句和开关语句);如果成员函数在类体内声明,类体外定义,则此成员函数不是内联函数。

    三,宏定义和内联函数的差别

     宏不是函数,只是在编译前(编译预处理阶段),将程序中有关字符串不加任何验证的简单替代为宏体。

     内联函数是函数,在编译阶段,将有关代码嵌入到调用处,不需要中断调用函数,加快速度,但是增加了空间开销。

  • 相关阅读:
    odoo API装饰器one、model、multi的区别
    odoo配置界面设置字段默认值
    redhat_6.5下载地址
    常用在线工具链接
    odoo开发环境搭建(四):python开发工具IDE pycharm配置
    odoo开发环境搭建(三):安装odoo依赖的python包
    odoo开发环境搭建(二):安装Ubuntu 17虚拟机
    odoo开发环境搭建(一):安装VMware Workstation
    火狐浏览器网页截屏插件
    copy代码的时候,如何去掉代码前边的编号
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/3340319.html
Copyright © 2020-2023  润新知