永发信息网

c中static与extern的区别?

答案:3  悬赏:30  手机版
解决时间 2021-11-12 04:05
c中static与extern的区别?
最佳答案
这个一楼的回答差了一些哦。
有几种情况:
首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”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里就是错误的种子,以后它只能得到苦果!
全部回答
static标识的变量表示该变量只能在该区域内可见,ertern不能用来定义变量,只能用来告诉编译器,这个变量在别处定义,引用的外来变量。一般是全局变量
static是静态存储类型,属于局部变量,只能用于同一个函数内,在其他函数内使用是错误的。extern是外部存储类型,属于全局变量,可以用于从他定义开始的后续所有函数内。追问如果我用extern定义一个变量,能不能在同一个工程的不同函数里面用呢?追答比方这样
int i=10
void main()
{
int j=i;
……
}
void func()
{
int s;
i=s;
……
}
i可以在main中返回也可以在func函数中返回,假如i在func函数更改了值那么main中i也跟着更改
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
一岁女儿头在墙角撞了左边肿了该怎么办
颜工坊的里用的活泉怎么样?
一位资深肉友告诉你:为什么要养多肉
中学生作文——咀嚼成长
心牢落而无偶,意徘徊而不能揥什么意思
中国到塔希提(大溪地)有哪些直飞城市吗?
梦到黑蛇是什么意思?
国内短租房预订用哪个APP好呢?
强制网购是“倡议”还是“被自愿”
办个水果网套厂多少钱
为什么2个人相爱会记不住一个人对你的好,只记
“颐”的成语有哪些?
叶之书 是什么
花蛤有几种颜色
物流中说到的6个卡板是多少
推荐资讯
李泽钜有几个孩子 李泽钜老婆王富信家庭背景
倒完混泥土抹面后为什么会出现开裂与掉皮
总蛋白83.5是偏高吗
求受为卖宠物的文,类似于138号异兽萌宠店这
广州市哪些道路黄牌车不能通行
两地相思的诗句
B75主板能装4×4内存吗
我单招报名了,也实名了,为什么会这样。
6*6米的客厅跨度需要放梁吗?
四、编写函数求n!,当n=6时,值为720。(25分
有没有什么比较靠谱的战棋类手游可以推荐下?
海水中有哪些燃料?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?