美文网首页
基础总结

基础总结

作者: CoderLHC | 来源:发表于2016-12-20 12:41 被阅读0次

变量 常量  宏 原文链接:http://www.jianshu.com/p/f83335e036b5



首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”static会定义一个变量,但是分成多种情况。

static 修饰局部变量:延长布局变量的生命周期

static 修饰全局变量:当前变量只能在当前文件中使用

static 修饰函数:  函数只能在当前文件中使用

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

先说extern 和 变量的关系。

先说只有一个文件(编译单元)的:

int i=10; //这个是定义一个全局变量,值为10

extern int i=10;  //这个是错误的,变量已经存在,怎么赋初值呢?

extern int i; //这个和第一句 int i=10; 可以同时存在在一个文件中。

再说跨文件(多个编译单元)的:

文件一:(假设这个文件没有错误!!)

int a=10;

文件二:

extern int a; // 这个正确

extern float a; // 这个编译不会错,赋值会怎样呢?

extern int b; //这个找不到

int a=9; //这个出错,全局变量多次定义

int a; //同上

static int a=9; //这个正确,这个产生一个仅在文件二中有效的全局变量a,初值为9,注意在文件二中将看不到那个值为10的全局变量!!!!

static就是刚才说的最后一种,此外就是函数内的使用了,不再多说了。

特别的,这样是错误的:

a.c:

static int x=10;

b.c:

extern int x; //因为x只在a.c中,b.c中根本看不到x,所以这个extern还是找不到x,因此会在链接时报错。

其他:extern尽量写到.h文件中,写到.c里就是错误的种子,以后它只能得到苦果!

相关文章

网友评论

      本文标题:基础总结

      本文链接:https://www.haomeiwen.com/subject/ksbxvttx.html