您的位置:首页 > 编程语言 > C语言/C++

C语言的链接属性的个人理解

2015-10-04 22:32 561 查看
C语言有3个链接属性:extern(外部)、intern(内部)、none(无)。

属于extern的标识符无论声明几次,都表示几个源文件中或整个项目中同一个实体。

属于intern的标识符在一个源文件中的多个声明都表示同一个实体。

属于none的标识符有几个声明就有几个实体,相互独立。

全局变量默认拥有external链接属性;

static修饰的变量拥有internal链接属性;

函数体中的变量用于none链接属性。

函数声明时也默认拥有extern链接属性。

已有链接属性的变量再添加任何链接属性都无效(声明的时候就赋予了链接属性?),保持原链接属性,但对缺省情况下是extern链接属性的标识符除外,加上static关键字,会将其从extern变为intern(被其所属源文件私有),函数同样也可以这样:static int a( int b )。声明局部变量后,使用的也不再是拥有extern链接属性的变量,而是这个新声明的变量(拥有extern链接属性的变量仍然可以在局部变量作用域外的其它地方调用,其它.c或.cpp文件调用时只需声明并加上extern即可如:extern
int b; printf( "%d\n",b );)。

注意这里用的定义和之前用的声明,定义变量和声明变量是不同的,定义变量编译器需要给他分配内存单元,而声明变量则不用,所以extern int a,此时的a表示别处的源文件定义过的a。变量或函数可以多次声明,但只能定义一次。

当变量在不同源文件都用到时(也就是需要具有extern链接属性),最好第一次声明就用extern关键字,尽管缺省也表示是extern链接属性,这样有利于代码的可读性。

有一个技巧,在一个.h文件声明多个函数,可以在一个.c或.cpp文件中对它们进行定义,在另一个.c或.cpp文件中对他们进行调用。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: