标识符的链接属性

单个程序可能由多个源文件编译成的目标文件和函数库链接形成,如何处理不同文件的标识符依赖于链接属性。而链接属性也会影响到作用域。

链接属性的类型

  • 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
	...
}
posted @ 2026-07-15 01:46  tanch25  阅读(5)  评论(0)    收藏  举报