extern存储类
extern型是外部变量、简单说就是其他c文件中的变量,你拿过来用要声明。你也可以定义,供别的文件使用。
我们平时编的简单的程序只需要1个c文件,但是如果很复杂的程序可能需要十几个文件。
比如说1个项目分给很多人,每个人完成各自的模块,要调用别人c文件中的变量,这时就用到了extern。
‘贰’ 哪位大虾帮忙梳理一下4种存储类别(auto,register,extern,static)和局部/全局变量的关系
auto是局部变量,如果你定义一个全局变量为auto存储类型编译器就会报错
resister是寄存器存储,他的访问速度快,但单片机中寄存器的数量较少,程序执行过程中一般作为变量的暂存中介,里面的内容经常会被更改,所以通常是局部变量
extern是外部存储,一般是在当前文件中声明,在另外的文件中定义或者使用,一般为全局的
static是静态存储,他可以是全局的也可以是局部的,全局变量声明为static类型时他作用域只在当前文件中,局部变量声明为static类型时,他的作用域是在当前定义变量的{}内。在C++中static变量一般是整个类的属性。
‘叁’ C语言中函数隐含存储类型是什么
函数的隐含存储类型是extern,按照c语言的原则,函数隐含为全局都可以访问,因此默认为extern,而auto只用于变量,是变量的隐含存储类型。
‘肆’ C语言中定义数组时,前面的static、auto、extern三种存储类别有什么作用
static 有好几种用法,比如说屏蔽函数声明,避免污染全局变量表。。。在函数内部则是让局部变量放在静态存储区。。。
‘伍’ 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里就是错误的种子,以后它只能得到苦果!
‘陆’ extern 和static区别
static是静态存储类型,属于局部变量,只能用于同一个函数内,在其他函数内使用是错误的。extern是外部存储类型,属于全局变量,可以用于从他定义开始的后续所有函数内。
假设 在note1.c文件中定义static int A; 那么在note2.c文件中,是不能用A做为变量名吗?note2.c不能引用note1.c内的A,但是可以用A做变量名,切记:虽然都是命名为A,但是他们是不同的量
‘柒’ 这里的extern 存储类型怎么用求解释这道题
extern只是声明(表示定义在其他处,只是使用声明表示在这个地方使用。)
xy是全局变量。全局变量从定义处到该源文件结尾所有的函数都可以使用。
而main函数中调用的num函数却不能使用,因为其在定义x和y的上方,num函数中却想使用这个x和y。
所以所用关键字extern声明表示x和y不是新定义,而是使用别处的x和y,这样系统就会查找本源文件和其他源文件(因为extern一般是使用在不同的源文件使用相同 变量的关键字)
所以,过程:
a=7,b=5 ---->x=12,y=2----调用num函数----->声明使用的是x=12,y=2这两个变量,而不是新定义xy新变量---->修改x=15+10=25,y=15-10=5.---->所以最后x为25 y 为5
‘捌’ C语言中,函数的隐含存储类别是 auto 还是 extern,为什么两种答案我都看到过
函数的存储类型指的是其他文件模块可否访问,其类别可以是extern或static。
static是指该函数只能被本源程序文件道中的模块访问。extern是指可被本源程序文件外的模块访问。
C语言中函数的存储类型隐含为版全局的,因此默认为extern。
函数内定义的变量,默权认作用域在本函数内,即其类型是auto。
(8)extern存储类扩展阅读:
C语言中提供了存储说明符auto、register、extern、static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。
其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。
extern用在变量声明中常常有这样一个作用:要在*.c文件中引用另一个文件中的一个全局的变量,那就应该放在*.h中用extern来声明这个全局变量。
extern用于变量的用法:
1、extern int a;//声明一个全局变量a
2、int a; //定义一个全局变量a
3、extern int a =0 ;//定义一个全局变量a 并给初值。一旦给予赋值,一定是定义,定义才会分配存储空间。(注意:经过测试在GCC中,这样定义变量是不能通过编译的,而在VS2013可以)
‘玖’ C语言中有哪些存储类型
四种变量存储类型。说明符如下:
auto static extern register
一、auto
auto称为自动变量。
局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进
行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上
从来不用。
二、static
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。
1. 静态局部变量
它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它
函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。
2. 静态全程变量
Turbo C将大型程序分成若干独立模块文件分别编译, 然后将所有模块
的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态
全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与
全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用,
而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。
三、extern
extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要
被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用
extern来说明。
四、register
register称为寄存器变量。
‘拾’ Extern外部型变量的存储特点
1.
自动变量(auto) 语言规定,函数内凡未加存储类型说明的变量均视为自动变量.自动变量具有以下特点: (1)自动变量的作用域仅局限于定义该变量的个体内.在函数中定义的自动变 量,只在该函数内有效.在复合语句中定义的自动变量只在该复合语句中有效. (2)自动变量属于动态存储方式,只有在使用它时,即定义该变量的函数被调 用时才给它分配存储单元。
2.
外部变量(extern) 需要注意的是,外部变量的说明要应用在全局变量上.对全局变量进行外部 变量说明后,可以扩大其作用域.例如,在同一程序文件中,如果全局变量的定 义在后,而引用它的函数在前,只需将该变量说明为extern,则位置靠前的函数 就会引用它.又如,当一个文件分散在几个程序文件中时,若一个程序文件中已 经定义了某个全局变量。
3.
静态变量(static) 静态变量属于静态存储方式,但是属于静态存储方式的不一定是静态变量。