链接属性深入
更新时间:2026-10-01。配合 27-multi-file-project 与 28-compile-link-process,解决链接期符号问题。
一、链接类型
- 外部链接:普通函数/全局变量,跨翻译单元可见,同名只能有一个定义(ODR-like)。
- 内部链接:加
static的文件作用域对象,仅本翻译单元可见,可避免污染和命名冲突。 extern用于声明“定义在别处”,不分配存储。
二、inline 陷阱
C99 中头文件里单独 inline 不一定发出外部定义,调用可能变成未定义引用;头文件应使用 static inline(每 TU 私有)或配合 extern inline 明确外部定义。C++ 规则不同,别混用经验。

三、常见坑
- 头文件定义全局变量/非 static inline 函数。
- 只声明不定义。
- 忘记 include guard 重复声明。
小结
总结
C 的链接分外部链接(普通函数/全局变量,跨翻译单元可见、同名只能一个定义)和内部链接(文件作用域加 static,仅本 TU 可见,用来避免符号污染),extern 只做"定义在别处"的声明不分配存储;C99 的 inline 形态特殊,头文件里裸 inline 不一定发外部定义易致 undefined reference,应在头文件用 static inline 或配合 extern inline 明确外部定义;而把变量/非 static inline 函数定义放进会被多 TU 包含的头文件,正是 multiple definition 的根因。