什么是内部连接和外部连接
什么是内部连接和外部连接
在C和C++中外部连接的全局变量都是只能定义一次声明多次.
在C/C++中一个外部连接的全局变量可以定义一次. 格式为:
//1.CPP
int a;
定义可以理解为 "为这个变量分配内存". 多次定义同一个外部连接的全局变量会导致连接时出错, 因为一个变量只能分配内存一次.
如果在另一个源文件中要用这个变量, 这个变量需被声明. 格式为:
//2.CPP
extern int a;
声明的意思是告诉编译器 "这个变量是定义在另一个源文件里的". 声明不涉及内存的分配, 所以一个变量可以有多次声明.
对于使用外部连接的全局变量, 一个常用的惯例是, 在 .C或.CPP 中定义, 在.H 中声明. 例如, 一个模块由model.h 和 model.cpp 组成. 如果 model 需要定义一个全局变量 int a;而且希望别的模块使用和修改它,那a 的定义和声明应该是:
//In model.h
extern int a; //声明
...
//In model.cpp
int a; //定义
内部连接的全局变量是只在当前源文件内部可见的全局变量. 它可以通过定义时加static 实现.例如:
//model.cpp
static int a;
这里a 就是只能在model.cpp里可见的. 另一个源文件不能访问和使用a, 实际上, 它根本不知道a 的存在. 所以多个源文件中可以定义相同名字的内部连接的全局变量.