C/C++ 中的 static 和 inline 的作用

Aug 03, 2022 • 预计阅读时间 1 分钟

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

C++C
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

ObjC 中的黑魔法 Swizzling

如何使用代码结束 iOS 应用