C++ 学习之旅(10)——static与extern

本文详细介绍了C++中`static`和`extern`关键字的用法,通过实例解释了它们如何影响变量的作用域和链接过程。当`static`用于变量定义时,限制了变量的作用域仅限于当前文件,防止了多处定义导致的链接错误。而`extern`则用于声明变量在其他文件中的定义,允许不同文件间共享变量。错误示例展示了未正确使用`extern`时可能出现的链接问题。
摘要由CSDN通过智能技术生成

只要你看过我系列中之前关于编译和链接的内容,你就能看懂以下内容,直接上例子:

Static.cpp

int S_var = 5;

main.cpp

#include <iostream>

int S_var = 10;

int  main()
{
	std::cout << S_var << std::endl;
	std::cin.get();
}

这样Build是会报错的“fatal error LNK1169: one or more multiply defined symbols found”,因为链接器在多个地方发现了S_var的定义,从而发生了冲突。如果我们修改一下Static.cpp

static int S_var = 5;

这样就会输出10。

所以static关键字就是把定义限制在它自己所在的文件中,这样在链接的时候别的文件就不会链接到这个定义,避免产生冲突。

那如果我们希望在main.cpp中使用static.cpp的S_var呢?这时可以使用extern

Static.cpp

int S_var = 5;

main.cpp

#include <iostream>

extern int S_var;

int  main()
{
	std::cout << S_var << std::endl;
	std::cin.get();
}

此时就会输出5。那如果这样呢?

Static.cpp

static int S_var = 5;

main.cpp

#include <iostream>

extern int S_var;

int  main()
{
	std::cout << S_var << std::endl;
	std::cin.get();
}

自然会报错,因为main.cpp希望链接一个外部的S_var,但是Static.cpp中的S_var是不会被其他文件找到的,所以报错“fatal error LNK1120: 1 unresolved externals”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值