C 链接属性

文件1 

#include<stdio.h>
main(){
extern int a;//a指定为external连接属性
printf("%d",a);//a值为100
f();//输出为hello!
}

文件2

#include <stdio.h>
int a=100;//全局变量,其它文件可访问

static int  b;//限于在本文件中使用的变量
 f(){//具有external连接属性
printf("hello!");

}

static  d(){}//internal连接属性

 

3种链接属性:external(外部),internal(内部)和none(无)。

none:总是被当作单独的个体,也就是说该标示符的多个声明被当作独立不同的实体。

internal:在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体。

external:不论声明多少次,位于几个源文件都表示同一个实体。

如果某个声明在正常情况下具有external链接属性,在它前面加上static关键字可以使它的链接属性变为internal。如下声明文件2中的a:

static int a;这样a就将为这个源文件所私有。如果在其它文件中有链接到一个叫做a的变量,那么它所引用的是另一个不同的变量。也可把函数声明为static,如下:

static int c(){}     这样可以防止它被其他源文件调用。

static只对缺省链接属性为external的声明才有改变链接属性的效果。

(static用于声明局部变量时,是使这个变量成为静态变量,就是这个变量在程序的整个运行过程中总是存在的,直到程序结束,一般来说局部变量在运行完它所在的语句块后就会自动释放。这样是为了使这个变量在下次运行时能使用上次的结果。)

extern:一般而言,它为一个标示符指定external连接属性,这样可以访问其它任何位置定义的这个实体。但它不能用于更改第一次声明所指定的连接属性。如:

static int  i;

f(){

.....

extern int k;

extern int i;

}

在这个当中,i的链接属性仍为internal。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值