标识符的链接属性
单个程序可能由多个源文件编译成的目标文件和函数库链接形成,如何处理不同文件的标识符依赖于链接属性。而链接属性也会影响到作用域。
链接属性的类型
- external:不同源文件的所有声明指向同一个实体
- internal:同源文件中的所有声明指向同一个实体
- none:该标识符的多个声明均作为独立不同的实体。
默认链接属性
b, c, f的链接属性为external,其余标识符为none
int b; // 可能被其余源文件访问
int c(int d) // 可能被其余源文件调用
{
int e;
int f(int g); // 链接到其他源文件定义的函数
static int e; // static修改的是变量的存储类型,而非修正为external
...
}
链接属性修改
关键字 extern 和 static
某声明缺省具有 external 链接属性,在前面加上 static 可以转变为 internal,即当前源文件私有,可运用于变量与函数。
extern为标识符指定external链接属性,可以访问在任何位置定义的这个实体。但当其用于该标识符第2次或以后的声明时不会修改第1次定义的链接属性。
static int i; // 缺省external -> internal
int func() // 缺省external
{
int j; // none
extern int k; // external
extern int i; // 保持internal
...
}
浙公网安备 33010602011771号