static
把符号限制为 LOCAL
,避免链接时同名造成冲突。
inline
把符号标识为 WEAK
,如果出现多个同名则只有一个拷贝。
static inline
组合,作用和 static
一样,区别在于编译器视情况决定是否开启内联。
C++ 11 建议使用匿名的命名空间替代 static
:
// C 语言中的写法
static char *app_id = "id12345678";
static int loadDefaultConfig() {
return 0;
}
// C++ 11 中,使用匿名命名空间
namespace {
char *app_id = "id12345678";
int loadDefaultConfig() {
return 0;
}
}
inline
关键字已经没有内联的作用了,如果要让编译器开启内联,需要使用编译器提供的属性标识:
__attribute__((always_inline))
在 iOS/macOS 开发中,Foundation 库提供了宏 NS_INLINE
可以简化内联的写法。
参考资料
https://gcc.gnu.org/onlinedocs/gcc/Inline.html
https://clang.llvm.org/docs/AttributeReference.html#always-inline-force-inline