C++静态持续性之外部链接性---普通成员变量,变量单一定义规则和extern使用示例

C++的OneDefinitionRule(ODR)规定变量只能被定义一次。文章介绍了两种变量声明类型:定义声明(分配存储空间)和引用声明(不分配存储空间,引用已有变量)。为避免ODR冲突,可以使用extern关键字、命名空间或static修饰符。在给定的代码示例中,extern用于在不同文件间共享变量,而static则限制变量在当前文件内可见。
摘要由CSDN通过智能技术生成

一、单一定义规则

C++ 单定义规则 One Definition Rule ODR ),该规则指出,
变量只能有一次定义。为满足这种需求, C++ 提供了两种变量声明。一
种是定义声明(defining declaration)或简称为定义(definition),它给 变量分配存储空间;另一种是引用声明(referencing declaration)或简 称为声明(declaration),它不给变量分配存储空间,因为它引用已有 的变量。
引用声明使用关键字 extern ,且不进行初始化
注意:如果一个程序中同时存在多个相同的变量名,编译会报错,这时可以用如下方法避免:
1、使用extern 关键字
2、使用命名空间namespace
3、使用static修饰变量,static限定符使该变量被限制在这个文件内,并覆盖相应的全局定义(即使用static修饰的变量为内部链接,原理同2类似,限制范围)

二、使用示例

file1.cpp

#include <iostream>
int tom=3;

using namespace std;

int main()
{
    cout <<"file1.cpp &tom"<<&tom<<",,,,tom="<<tom<<endl;
    remote_access();
   cout <<"file1.cpp &tom"<<&tom<<",,,,tom="<<tom<<endl;
    return 0;
}

file2.cpp

#include <iostream>
extern int tom;
//extern int tom=5;//这里这样重新初始化编译会报错
//static int tom=4; //使用static修饰的变量,具有内部链接性,该变量限制在file2.cpp中使用,也可行


void remote_access()
{
    using namespace std;
    tom=5;//这样重新赋值可以,而且file1.cpp的tom变量值也被修改成了5
 
    cout <<"file2.cpp &tom"<<&tom<<",,,,tom="<<tom<<endl;
}

编译上面两个文件,g++  file1.cpp file2.cpp  -o  test

程序执行结果如下:

file1.cpp &tom0x403010,,,,tom=3
remote_access() reports the follwing addresses:
file2.cpp &tom0x403010,,,,tom=5
file1.cpp &tom0x403010,,,,tom=5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粤M温同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值