头文件中的static inline函数
前言:最近重新看Glucose源码,看到.h文件中有很多static inline 函数,那么static inline 函数和 inline函数有什么区别呢?
首先是inline 关键字,实际上inline仅仅是建议内联而不是强制内联,gcc中O0优化时是不内联的,即使O2以上,但如该函数被作为函数指针赋值,那么它也不会内联,也必须产生函数实体,以获得该函数地址。经过测试,仅inline函数即使Os优化也不内联,因为没有static,编译认为它是全局的,因此向普通函数一样编译了。如果加上static,则会内联。(Os等级测试)所以在头文件中务必要加上static inline,否则和普通函数一样,当多个C文件包含是就会重复定义。所以加入static提高代码健壮性。
那么又有一个问题,为什么要在头文件中定义函数呢?
这个问题有点傻,但是仍然有这个疑问。虽然知道了头文件中用inline函数时要加入static,但是为什么要在头文件中定义函数呢?
仔细想想,可以理解为宏,有些函数我们不希望耗费一次调用时间,解决的一个办法是宏。但是宏不够清晰,选择inline。所以这些希望全局使用又希望增加效率的函数实现在头文件中static inline。
浙公网安备 33010602011771号