inline关键字和宏函数的异同
来源:互联网 发布:java对称加密算法 编辑:程序博客网 时间:2024/06/16 14:08
相同点:
1.减少了函数调用的开销
不同点:
1.内联函数在编译时会进行语法检查,检查有没有语法错误之类的,而宏函数直接替换
2.替换发生的时期也不同,内联函数是在编译时展开,而宏函数是在预编译时展开
3.宏在处理时需要注意二意性问题(由大括号引起的语意不同,这是为什么有些宏函数会加do{…}while(0)的原因),而内联函数则不需要(因为语法和普通函数相同)
4.当函数的代码比较复杂时,所声明的内联函数在编译器实施时不一定会展开代码,而宏函数会照旧(编译器会衡量调用函数的开销以及直接展开的开销)
最后在使用内联函数时有一点需要注意:内联函数的声明和定义最好都在头文件中,因为编译器在处理内联函数时,需要在调用处直接展开函数。
比如如下代码:
inline_demo.h
#include <iostream>using namespace std;inline void test();
inline_demo.cpp:
#include "inline_demo.h"inline void test(){ cout << "inline function" << endl;}
inline_demo1.cpp:
#include "inline_demo.h"void func(){ test();}int main(){ func(); return 0;}
输入g++ inline_demo.cpp inline_demo1.cpp -o demo
编译会提示错误:对‘test()’未定义的引用
。
这时我们将test()
的定义也放在头文件中,再次编译就通过了。
阅读全文
0 0
- inline关键字和宏函数的异同
- Inline关键字和虚函数的概念
- C语言的inline关键字和静态函数
- inline函数和宏函数的区别
- inline函数和宏函数的区别
- inline函数和宏函数的区别
- inline函数和宏函数的区别
- inline函数和宏函数的区别
- inline 函数和宏的比较
- inline内联函数和宏的区别
- inline函数和宏的区别
- inline内联函数和宏的区别
- inline函数和宏的区别
- NSString 使用 copy 关键字和 strong 关键字修饰的异同
- define宏定义与inline内联的异同
- inline 内联函数和宏函数的区别
- 宏和内联inline函数
- 宏和函数 inline区别
- jsp中el表达式的使用(fn标签的使用)
- C++入门知识
- nginx的虚拟主机配置和反向代理,负载均衡
- 安装Ubuntu 14.10后要做的事(上)—— 基础软件篇
- mysql 数据库中varchar的长度与字节,字符串的关系
- inline关键字和宏函数的异同
- HBase之api的基本运用(三)
- Apache ActiveMQ Cluster Master and Slave with JDBC
- java中的反射
- C# post 请求
- 77. Combinations
- .Net Entity Framework CodeFirst 中多次重复引用同一个外键问题
- 发送验证码后计时
- Strom程序的并发机制,配置并行度(代码实现)、动态改变并行度,local or shuffle分组,分组的概念以及分组类型