外部变量声明没有内部链接
Extern variable declaration does not have internal linkage
我问这个问题是为了跟进这篇文章。他们说extern
块声明有外部链接而不是内部链接,但我不确定为什么:
static int i = 0; // #1
void g() {
extern int i; // #3 external linkage
}
为什么外部声明不采用i
的链接(内部链接)?帖子中的引用似乎允许这样做。在OP的引号后面的例子中,它有:
static void f();
void g() {
extern void f(); // internal linkage
// ...
}
,它表示外部声明具有内部链接。为什么使用变量和函数有区别?
因为变量"i"具有静态存储。那么,在你的代码片段中,
- 省略"static"语句将产生"no linkage"
- 应用"static"语句将产生"外部链接"(因为静态存储是C/c++运行时基础结构中非常特殊的一部分)。
同样,你可能会发现这个讨论很有趣:C语言中的静态存储类
相关文章:
- 内联函数中具有内部链接的全局变量
- C++:具有内部链接的正向声明常量
- 具有命名空间范围的名称的 C++ 内部链接
- 为什么函数 f4 的名称具有内部链接,而不是 C 语言链接?
- 为什么在匿名名称空间中定义的模板时,为什么内部链接错误
- C++构造函数具有内部链接,但未定义 [-Wundefined-internal]
- C 无需使用匿名名称空间即可实现内部链接
- 内联是否决定内部链接?
- ODR和内部链接
- 为什么内部链接的名称会出现在我的目标文件的符号表中?
- C 标准:DO命名空间constexpr变量具有内部链接
- 通过来自另一个翻译单元的指针调用具有内部链接的函数
- 如何使朋友函数具有内部链接
- 类使用全局外部常量变量,该变量通过内部链接定义
- char* 具有内部链接,因此它不能不是非类型模板参数
- C++中const的内部链接,但我得到了重复的符号
- 非成员函数模板何时具有内部链接
- 我是否应该始终将我的全局函数与内部链接
- 内联命名空间变量有内部链接吗?如果没有,为什么下面的代码有效
- 使用comsup.lib时出现内部链接器错误