c/c++连接性:内连接,外连接,无连接,关键字static使外连接变成内连接。

本文详细解析了C/C++中的内连接、外连接和无连接的概念,探讨了静态修饰对连接性的影响,并举例说明了全局函数、类成员、全局变量和typedef等的不同连接方式。遇到链接错误时,提示了可能的原因和解决方法。
摘要由CSDN通过智能技术生成

c/c++连接性:内连接,外连接,无连接,关键字static使外连接变成内连接,编译报链接错误。

编译时出现链接错误:
常常是内链接的变量使用外连接的用法。

连接性:
描述标识符如何在不同单元中共享,容易与作用域概念混淆。

如果一个标识符可以在其他编译单元中或者在定义它的编译单元中的其他范围内被调用,它就是外连接的,是能被其他单元的文件访问的,外连接的标识符需要分配运行时的存储空间,因为要保证其随时可以被调用。

例如:
函数定义体是外连接的,
没有static修饰全局变量,在其他文件中使用extern声明后使用。
extern修饰的变量。
命名空间的命名。

如果一个标识符能在定义它的编译单元中的其他范围内被调用,也就是一个编译单元的文件之间共享,但是不能在其他编译单元中被调用,就是内连接,只能在当前单元文件之间访问。
例如:

static void f2(){…}//f2为内连接的
union//匿名联合的成员为内连接的
{
long count;
char *p;
};
class Me{…};//Me是内连接的
const int MAX_LENGTH = 1024;//常量为内连接的
typedef long Integer;//typedef是内连接的

一个仅能够在声明它的范围内被调用的名字是无连接的,只能在当前函数或代码块中被访问。
例如:函数中的临时变量,函数中的静态变量

汇总一下:几种变量存储方式,手动申请释放的不算
存储描述							持续性	作用域							连接性    	声明方法自动									自动		代码块							无       			代码块中声明寄存器								自动		代码块							无       			代码块中使用关键字register静态,无连接性				静态		代码块							无       			代码块中使用关键字static静态,内连接性				静态		文件,本编译单元		内连接    	不在任何函数内,使用static修饰静态,外连接性				静态		文件,所有编译单元	外连接    	不在任何函数内,不使用static,其									它文件中使用extern声明后使用

全局函数声明是静态内连接;
全局函数定义体是静态外连接;

类成员函数声明是静态内连接;
类成员函数定义体是静态外连接;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值