C++ 宏与内联函数
2017-04-10 12:59
274 查看
因为函数调用需要开销(如:保护调用者的运行环境、参数传递、执行调用指令等),所以函数调用会带来程序执行效率的下降,特别是对一些小函数的频繁调用将是程序的效率有很大的降低。
C++提出了两种解决方法:宏、内联函数。
1. 宏
宏是C++编译预处理系统处理的实体。
宏定义的4种格式:
1)#define <宏名> <文字串>
在编译前进行使用文字串进行宏替换
#define PI 3.14
2)#define <宏名>(<参数表>) <文字串>
在编译前进行使用文字串进行宏替换
#define max(a,b) a>b?a:b
3)#define <宏名>
只是告诉编译程序该宏名已经被定义,不做任何文字串替换,其用于条件编译
如:#define OUTPUTFILE
#ifdef OUTPUTFILE
//输出到文件的代码
#endif
4)#undef <宏名>
用于取消宏名的编译
不足:1)重复计算,如max((x+1),(y+2)),因为其只是进行单纯的文字替换
2)不进行参数类型检查和转换
3)不利于一些工具对程序的处理(如C++程序编译后,所有宏都不存在了)
2. 内联函数
在函数定义中的返回值类型之前加上一个关键字 inline
其作用是建议(具体有没有不一定,有些函数加上也不会作为内联函数对待,如递归函数)编译程序把该函数的函数体展开到调用点,这样就避免了函数调用的开销,从而提高了函数调用的效率。
inline int max(int a,int b)
{return a>b?a:b;}
注意:内联函数名具有文件作用域。
C++提出了两种解决方法:宏、内联函数。
1. 宏
宏是C++编译预处理系统处理的实体。
宏定义的4种格式:
1)#define <宏名> <文字串>
在编译前进行使用文字串进行宏替换
#define PI 3.14
2)#define <宏名>(<参数表>) <文字串>
在编译前进行使用文字串进行宏替换
#define max(a,b) a>b?a:b
3)#define <宏名>
只是告诉编译程序该宏名已经被定义,不做任何文字串替换,其用于条件编译
如:#define OUTPUTFILE
#ifdef OUTPUTFILE
//输出到文件的代码
#endif
4)#undef <宏名>
用于取消宏名的编译
不足:1)重复计算,如max((x+1),(y+2)),因为其只是进行单纯的文字替换
2)不进行参数类型检查和转换
3)不利于一些工具对程序的处理(如C++程序编译后,所有宏都不存在了)
2. 内联函数
在函数定义中的返回值类型之前加上一个关键字 inline
其作用是建议(具体有没有不一定,有些函数加上也不会作为内联函数对待,如递归函数)编译程序把该函数的函数体展开到调用点,这样就避免了函数调用的开销,从而提高了函数调用的效率。
inline int max(int a,int b)
{return a>b?a:b;}
注意:内联函数名具有文件作用域。
相关文章推荐
- C++内联函数
- 宏和c++中的inline内联函数
- c++内联函数
- 内联函数inline的使用探索(来自C++primer plus)
- C/C++ inline 内联函数
- 3、不一样的C++系列--C++的内联函数
- C/C++中内联函数与静态函数
- 芯群面试之——C++中宏与内联函数
- C++内联函数学习总结
- 有关C里的宏与C++内联函数的问题 C/C++ / C++ 语言 - CSDN社区 community.csdn.net
- C++学习笔记(二):内联函数inline
- C++ 普通内联函数 及内联函数与宏的区别
- c++内联函数
- inline c++内联函数
- C++内联函数
- C++ inline函数 内联函数
- C++内联函数
- C++中的内联函数inline总结
- C++之inline内联函数
- 三、从C到C++(三)内联函数、内联函数的处理和限制、C++中新的类型转换符