内联函数
使用inline修饰函数的声明或者实现,可以使其变成内联函数
inline int sums(int a) {
return a + a;
}
建议声明和实现都增加inline修饰
特点
- 1.编译器会将函数调用直接展开为函数体代码
- 2.可以减少函数调用的开销
- 3.有些函数即使声明为inline,也不一定会编译成内联,比如递归函数
哪些适合内联函数?
- 1.函数的代码量不是很多
- 2.函数的调用频率比较高
设想如果是非内联函数,频繁的开辟内存,释放内存是比较耗性能的
缺点:会增大代码体积,尽量不要内联超过10行代码的函数
内联函数和宏
#define sum(a) ((a) + (b))
- 内联函数类似于宏替换,都是预编译时候替换
- 内联函数和宏都可以减少函数调用的开销
- 对比宏,内联函数多了语法检测和函数的特性
#pragma once
和 #ifndef #define #endif
区别
- 1.#ifndef #define #endif受C\C++标准的支持,不受编译器的任何限制
- 2.有些编译器不支持 #pragma once (比较老的编译器不支持,如GCC3.4版本之前),兼容性不够好
-
- #ifndef #define #endif可以针对一个文件中的部分代码,而#pragma once只能针对整个文件