extern--static是冤家吗?

       了解extern关键字的都应该知到它可也调用别的源文件中的变量和函数,这样在代码多的时候就可以节省很多时间。

       而static却要和它反着来(就像是你的女朋友一样,哈哈哈)是要被static标记的变量,extern统统都调用不了,就打个比方

源文件1(先定义一个变量)

int a = 10;

源文件2(想调用原文件1中的a)

extern int a;

这样你在原文件2中便可以直接调用 a 的值

但是当遇到static时

源文件1(先定义一个变量)

static int a = 10;

源文件2(想调用原文件1中的a)

extern int a;

这是你如果想调用 a 它就已经被封锁了,原文件二就找不到 a 的值了

当然你如果觉得extern--static的孽缘就这么点的话,呢你可就太单纯了

extern不仅可以调用变量它也可以用人家的函数比如

源文件1(创建一个函数)

int Add(int x,int y);

int z = x+y ;

printf( "%d",z);

源文件2(调用原文件1中的函数)

extern int Add(int x ,int y);  (声明外部函数)

int main ()

{

        int a =10;

        int b = 2;

        int sum=Add( a,b );

        printf( "sum = %d\n", sum );

        return 0;

}

但是当遇见static时,extern又不行了

源文件1(创建一个函数)

static int Add(int x,int y);

int z = x+y ;

return z;

源文件2(调用原文件1中的函数)

extern int Add(int x ,int y);  (声明外部函数)

int main ()

{

        int a =10;

        int b = 2;

        int sum=Add( a,b );

        printf( "sum = %d\n", sum );

        return 0;

}

对,和你猜想的一样,extern又用不了Add这个函数了

千万不要小瞧了static关键字,它作用可大了

1. static修饰局部变量

让static修饰的变量生命周期会变长,打个比方

 viod test()
{

        int a=1;    a++;    printf("a=%d\n",a);    (其实是要竖着写的,为了省地方)

}

int main()

{

        int i=0;

        while(i<5)

        {

                test ();    i++;

        }

        return 0;

}    来猜一猜这里 a 打印的值是几?

答案是 2  2  2  2  2

你猜对了吗?

这里的 int a =1是局部变量,出了循环它将清除再从a = 1开始

呢如果在int a=1;前面加一个static呢?

再来猜一猜这里 a 打印的值是几?

答案是  2  3  4  5  6

这次你有猜对了吗? 如果没有就往下看看吧!

static int = 1;

如果你这样写,呢么a现在是相当于静态的局部变量 ,由于加了static的缘故,a递增后的生命周期延长了,每次它递增后,它的增值将不会被清 0,一直递增。

static关键字

具体来说它有三点

1. static修饰局部变量

    局部变量的周期则会变长

2.static修饰全局变量

    改变了变量的作用域  ---  让静态的全局变量只能在自己所在的源文件使用就和extern杠上了

3.static 修饰函数

   也是改变了函数的作用域---不准确

    static修饰函数改变了函数的链接属性

可能有的地方不准确,或者太笼统,哈哈哈,请谅解!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值