c语言external的作用,c语言3种链接属性: 外部(external), 内部(internal),无设置(none)...

main.c

------------------

void printtest1();

void printtest1();

int main(int argc, char *argv[])

{

printtest1();

printtest2();

system("PAUSE");

return 0;

}

编译时提示错误 unit2.c multiple definition of 'a' ,由于unit1.c和unit2.c都定义了a

第一步测试结论:如果在不同的文件中定义相同名字的变量,编译器无法通过编译

第二步测试,把其中一个声明改成extern

这个时候把unit2.c改造一下

extern int a;

void printtest2()

{

printf("print test at %s, variable a = %d/n", __FILE__, a);

}

unit2中使用extern标示该变量是外部链接的, 这样编译通过了,结果显示unit1和unit2中a的值都为10,OK,值相同了,那么真的是同一个变量了吗,修改一下值再确认一下

改造一下main.c,修改a的值

extern int a;

a = 20;

printtest1();

printtest2();

a = 30;

printtest1();

printtest2();

这个时候输出为

unit1.c   20

unit2.c   20

unit1.c   30

unit2.c   30

可以确认的确是使用了同一个变量了。

第二步测试结论;使用extern可以访问其他文件中定义的变量

第三步测试把其中一个声明使用static标示

首先在unit1.c这把a声明成static,个时候编译器提示main.c和unit2.c中的a未定义,static把unit1.c中的a定义为文件内部使用范围,unit2.c和main.c中无法访问到该变量。

把uint2.c中的声明修改成int a;

这个时候输出为

unit1.c   10

unit2.c   20

unit1.c   10

unit2.c   30

OK,结果显示unit1.c中的a和unit2.c中的a互相不影响了。再测试一下,在unit1.c中使用extern int a,看看能不能引用到unit2.c中的变量

void printtest1()

{

extern int a;

a = 10;

printf("print test at %s, variable a = %d/n", __FILE__, a);

}

这个时候输出为

unit1.c   10

unit2.c   20

unit1.c   10

unit2.c   30

可以确认unit1.c中使用的a都是本文件内定义的变量,无法影响到unit2.c中的变量了。

第三步测试结论:使用static标示的变量在文件内部有效,其他文件中无法访问。并且在该文件中无法引用到其他文件的同名称变量

第四步测试,两个文件都设置成extern

如果在unit1.c和unit2.c中都申明成extern会怎么样呢?

unit1.c

--------------------

extern int a;

void printtest1()

{

printf("print test at %s, variable a = %d/n", __FILE__, a);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值