在一个程序中使用具有内部和外部链接的变量名

问题描述

B.cpp

 #include <iostream>
 static int x=4;   
 void print_x()  {  std::cout<< x;  }

A.cpp

 #include <iostream>
void print_x();  //forward declaration 
int x=3;
int main ()
{
std::cout<< x << "    ";
print_x();
} 
// output 3     4

我在Visual Studio 2019中运行此代码,但得到了此输出,但是我期望找到链接错误,因为当函数get_x()被执行时,链接器将看到两个定义,第一个是B中的静态x。 cpp,第二个是A.cpp中的x,因为它具有外部链接
那么为什么这段代码可以正确运行?

解决方法

静态变量未与其他翻译单元(内部链接)共享,因此与A.cpp中定义的全局变量不同。

对于链接程序,将维护ODR约束。这个post也可能对您有帮助。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...