C语言中define与inline的一些小区别和用法
2017-11-23 18:44
831 查看
1.define:定义预编译时处理的宏;
只进行简单的字符替换,无类型检测
2.inline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝既为提出申请,不一定会成功
inline
1) 产生背景
inline这个关键字的引入原因和const十分相似,inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中
表达式形式的宏定义。
表达式形式的宏定义一例:
#define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)
这种表达式形式宏形式与作用跟函数类似,但它使用预编译器,没有堆栈,使用上比函数高效。但它只是预编译器上符号表的简单替换,不能进行参数有效性检测及使用C++类的成员访问控制。
inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。inline代码放入预编译器符号表中,高效;它是个真正的函数,调用时有严格的参数检测;它也可作为类的成员函数。
2) 具体作用
直接在class类定义中定义各函数成员,系统将他们作为内联函数处理;成员函数是内联函数,意味着:每个对象都有该函数一份独立的拷贝。
在类外,如果使用关键字inline定义函数成员,则系统也会作为内联函数处理;
#define 宏名要替换的代码
宏定义,保存在预编译器的符号表中,执行高效;作为一种简单的符号替换,不进行其中参数有效性的检测
typedef 已有类型 新类型
别名, 常用于创建平台无关类型, typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。
只进行简单的字符替换,无类型检测
2.inline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝既为提出申请,不一定会成功
inline
1) 产生背景
inline这个关键字的引入原因和const十分相似,inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中
表达式形式的宏定义。
表达式形式的宏定义一例:
#define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)
这种表达式形式宏形式与作用跟函数类似,但它使用预编译器,没有堆栈,使用上比函数高效。但它只是预编译器上符号表的简单替换,不能进行参数有效性检测及使用C++类的成员访问控制。
inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。inline代码放入预编译器符号表中,高效;它是个真正的函数,调用时有严格的参数检测;它也可作为类的成员函数。
2) 具体作用
直接在class类定义中定义各函数成员,系统将他们作为内联函数处理;成员函数是内联函数,意味着:每个对象都有该函数一份独立的拷贝。
在类外,如果使用关键字inline定义函数成员,则系统也会作为内联函数处理;
#define 宏名要替换的代码
宏定义,保存在预编译器的符号表中,执行高效;作为一种简单的符号替换,不进行其中参数有效性的检测
typedef 已有类型 新类型
别名, 常用于创建平台无关类型, typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。
相关文章推荐
- 【C语言】语法-typedef用法及与define的区别
- C语言学习历程(五)define、inline的区别及特点
- C语言之define用法总结
- c语言define的用法
- CSS伪类的一些用法以及visibility:hidden和display:none的一些区别
- C语言中typedef和define的区别
- C语言define 与typedef区别
- C语言系列(四):最近重拾C语言的想法,谈到C中易错点,难点;以及开源代码中C语言的一些常用技巧,以及如何利用define、typedef、const等写健壮的C程序
- typedef用法和与define的区别
- typedef与define的用法区别
- 继《Java中super的几种用法并与this的区别》后的一些发现
- c语言宏的一些用法
- define与inline的区别
- C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
- 在网上查找资料,学习define和inline的区别
- typedef和define的一些区别
- C语言的一些特殊用法(#define)
- C语言中的break、continue和goto三者的区别与用法
- 宏和函数的区别以及宏的一些简单用法介绍
- Renderer.materials 和sharedMaterials一些用法上的区别