• 技术文章 >数据库 >mysql教程

    宏定义的技巧、宏函数和内联函数的比较

    2016-06-07 15:41:32原创1163

    宏定义的技巧 1、函数体直接使用宏定义不管有没有返回都不能作赋运算的左右 . 如下图示: 错误提示: 2、通过 使用小括号() 把函数体括起来使用宏定义可以得到该函数体最后一条语句运算结果,这里还需要注意 ,不能漏了' ; ' ,如下图示: 打印结果如下: 3、一般情

    宏定义的技巧

    1、函数体直接使用宏定义不管有没有返回值都不能作赋值运算的左右值 . 如下图示:

    错误提示:


    2、通过使用小括号()把函数体括起来使用宏定义可以得到该函数体最后一条语句运算结果,这里还需要注意 ,不能漏了' ; ',如下图示:

    打印结果如下:


    3、一般情况下使用多语句宏定义时 ,最好使用do{...}while(0)或者({})的形式
    因为在if() 结构里做分支执行部分时,使用do{...}while(0)可以使调用时后面能正确的使用' ; ' ,一旦没写就会像普通语句那样报错 , 这样符合我们的习惯 , 如果只是使用{}的结构体形式 , 那么在调用时后面不能使用' ; ' , 如果按照我们的习惯写上 ' ; ' ,那么就有可能引起错误 . 比如 : if()后面还有else语句的话, 就会出错 , 因为 ' ; '被当作另外一条语句(空指令)的结束符插在else的上面 .
    注意 : 使用do{...}while(0)结构之后就不能把这个把这个宏定义作为赋值操作的左右值了.
    图示如下:


    打印结果对应如下:


    4、需要得到函数式宏定义的返回值的方法
    从上面我们已经可以知道当我们使用({})形式的宏定义时 , 只要函数体最后一次运算出的结果是我们想要的那使用这个形式是可以正确取得返回值的 并且放在赋值操作的右端; 当我们使用do{...}while(0)形式的宏定义时 , 我们是无法通过赋值操作来得到返回值的 , 但是我们可以通过多加一个参数 , do{}while(0)里面把要放回的值赋给多加的这个参数 , 这样我们就可以得到想要的返回值了.
    演示图示如下:



    打印结果如下:



    使用do-while(0)定义宏函数的优点





    宏函数与内联函数的比较

    先来看下C++ 的“函数内联”的工作机制。对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。这个过程与预处理有显著的不同,因为预处理器不能进行类型安全检查,或者进行自动类型转换。假如内联函数是成员函数,对象的地址(this)会被放在合适的地方,这也是预处理器办不到的。



    注意:



    相关博文:http://www.2cto.com/kf/201212/174236.html

    http://blog.csdn.net/gao675597253/article/details/7397373

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:数据库界大事件 随机写性能巨好的TokuDB开源了 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 实例分析MySQL中pt-query-digest工具的使用记录• 简单聊聊MySQL中join查询• 深入理解MySQL索引优化器工作原理• MySQL子查询详细教程• MySQL关于Count函数的用法区别总结
    1/1

    PHP中文网