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是内连接的
一个仅能够在声明它的范围内被调用的名字是无连接的,只能在当前函数或代码块中被访问。
例如:函数中的临时变量,函数中的静态变量
汇总一下:几种变量存储方式,手动申请释放的不算
全局函数声明是静态内连接;
全局函数定义体是静态外连接;
类成员函数声明是静态内连接;
类成员函数定义体是静态外连接;