美文网首页
iOS inline 、define 、typedef 的区别

iOS inline 、define 、typedef 的区别

作者: Alanxx | 来源:发表于2017-05-24 20:04 被阅读0次

    define:定义预编译时处理的宏

    只进行简单的字符替换,无类型检测

    typedef:定义类型别名 用于处理复杂类型

    例: typedef int A;

    则:A a; //定义a为int

    inline:内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝

    既为提出申请,不一定会成功


    inline

    1) 产生背景

    inline这个关键字的引入原因和const十分相似,inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中

    表达式形式的宏定义。

    表达式形式的宏定义一例:

    #defineExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)

    这种表达式形式宏形式与作用跟函数类似,但它使用预编译器,没有堆栈,使用上比函数高效。但它只是预编译器上符号表的简单替换,不能进行参数有效性检测及使用C++类的成员访问控制。

    inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。inline代码放入预编译器符号表中,高效;它是个真正的函数,调用时有严格的参数检测;它也可作为类的成员函数。

    2) 具体作用

    直接在class类定义中定义各函数成员,系统将他们作为内联函数处理;成员函数是内联函数,意味着:每个对象都有该函数一份独立的拷贝。

    在类外,如果使用关键字inline定义函数成员,则系统也会作为内联函数处理;

    iOS内联函数实战测试(仅供参考)


    #define (宏名要替换的代码)

    宏定义,保存在预编译器的符号表中,执行高效;作为一种简单的符号替换,不进行其中参数有效性的检测


    typedef (已有类型 新类型)

    别名, 常用于创建平台无关类型, typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换

    相关文章

      网友评论

          本文标题:iOS inline 、define 、typedef 的区别

          本文链接:https://www.haomeiwen.com/subject/nmioxxtx.html