C语言中,extern关键字怎么使用?最好解释清楚一点。
你好!
extern
用于扩展定义的全局变量的作用域,一般定义的全局变量的作用域为定义的位置起到函数结束,当要在定义全局变量的位置之前或其他源文件中引用该全局变量时,就需要在使用的函数中或源文件中用extern来扩展该全局变量的作用域,如:
#include
main()
{int
num(int
x);
int
b=3,c;
c=num(b);
printf("%d",c);
}
int
num(int
x)
{extern
int
a;
int
y;
y=a+x;
return
y;
}
int
a=2;
另外同理如果在定义函数时,在函数的首部的最左端加extern,则此函数是外部函数,可供其它文件调用。
如果对你有帮助,望采纳。
现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。
如果你定义A.cpp和B.cpp中都定义了全局变量i。那么分别编译,都可以通过,但是链接时就会报错。
B.obj : error LNK2005: "int i" (?i@@3HA) already defined in A.obj
反之,如果我们希望A.cpp和B.cpp中使用的i是同一个i。也就是两个文件,共同使用同一个全局变量。如果我们不在B.cpp中定义i。那么编译时就会报错,提示
error C2065: 'i' : undeclared identifier
如果我们定义i就会出现上面所说的错误。
于是,我们需要extern关键字。告诉编译器。这个i我们在别的模块中定义过了。你要编译的话,取别的模块找一找。这样程序就能够自动去A.cpp中寻找i的定义。并且让它在B.cpp中可以被使用。
其实说简单点就是你有两个以上的.C文件,如果把一个变量或者函数声明为extern,例:在文件a.c中声明extern a;那么这个变量a,就可以在文件b.c中使用,否则在b.c中无法使用这个变量。
INTO教育集团出国信息?本人雅思4.5分,听中介说INTO伦敦校区那边只要4.5...
比方说你读的是他代理的exter,那最好的结果就是直升exeter,如果你预科成绩达不到exeter into也可以内部帮你换到他代理的其他学校,但是这些学校肯定在排名和要求上不及exeter。至于雅思是要看申请的学校的,伦敦地区有雅思4.5读3个月语言的,也有5分才能读语言的。如果是直入,至少5.0 2.预科的...
求89C51单片机程序,用C语言编写,利用外部中断
方法类似,补写程序如下:include<reg51.h> define uint unsigned int define uchar unsigned char sbit LED=P0^0;sbit LED1=P0^1;void delay1ms (uint z){ uint x,y;for (x=z;x>0;x--)for (y=110;y>0;y--);} void exter() interrupt 2 { delay1ms(600);LED=0;delay1ms(200)...
为什么英国硕士学制只有一年
因为该学位的主要目的并非是培养研究生的科研能力,而是为学生步入职场做准备。授课型硕士一般学制在一年之内(当然也有例外,比如EXTER有九个月的课程,部分学校的部分专业有两年的课程比如UAL),包括课堂讲授,专题讨论,考试及连续性评估。与此相对,研究型硕士一般是两年,为那些已具有学士学位,想发展...
【求单片机C语言程序】STC89C52通过两个外部中断P3.2和P3.3,来控制P1....
\/*模块低电平有效、外部中断0、1为低电平出发*\/ include "reg52.h"void delay( char i){ unsigned char t;while(i--){ for(t=0;t<108;t++);} } void INT0_ROUTING() interrupt 0\/\/外部中断0子程序 { P0=0xfe;\/\/LED0点亮 while((P3|0xfb)==0xff);\/\/等待外部中断0口(P3^2...
3dmark分辨率选择方式介绍
3DMark Android版运行的场景跟PC版完全一样,也是名为“Ice Storm”的场景,它基于Direct 9x构建,手机可使用OpenGL ES 20 API完成渲染,根据分辨率不同有720P和1080P两种运行模式前者是默认设置,后者勾选“Exteram”。自从3DMark Vantage开始,3DMark就取消了设置分辨率,安排了3档测试的设置来到了3DMark ...
Android NDK Jni 开发C和C++的区别
C++中env为一级指针,用env->调用方法,无需传入env;C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern "C"进行链接指定,这告诉编译器,请保持我的名称,不要给我生成...
初学者急求51单片机外部中断程序,负跳变有效,中断程序为中断后先延时...
include<reg51.h> define uint unsigned int define uchar unsigned char sbit LED=P0^0;void delay1ms (uint z){ uint x,y;for (x=z;x>0;x--)for (y=110;y>0;y--);} void exter() interrupt 2 { delay(2);LED=0;} main(){ EA=1; \/\/ 开总中断 EX1=0; \/\/ 开外...
考英国研究生是看平均分还是绩点?平均分是怎么算的?
考英国研究生一般来说看的都是平均分,具体的申请的时候,以学生学校开出来的成绩单为准就可以,成绩单上都会有绩点和平均分的显示。想要前往英国留学推荐选择咨询启德教育。【点击领取英国留学规划】考英国研究生平均分的算法:1、第一种就是加权平均,计算公式为:(学分*成绩+学分*成绩)\/总学分。把...
用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器...
void exter_init(){ IT0=1;EX0=1;} void time_init(){ TMOD=0x01;TH0=timh;TL0=timl;ET0=1;EA=1;TR0=1;} void re_time(uchar a){ uchar i,j;for(j=0;j<a;j++){for(i=0;i<14;i++){ P0=cod1[temp[i]];if(i==3||i==5||i==9||i==11) poit=0;P2=i;...
范何石斛: extern在c中就是个外部申明,因为C是先申明再使用,当你想调用的变量或者函数不在你的模块当中,你可以使用外部申明.在使用外部申明的时候要特别注意,因为这只是个申明,并不是实体,当出现声明和实体不符的时候,编译器是不会管...
菏泽市13466389756: C语言中全局变量说明符extern该如何使用? - ?
范何石斛: 如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用.即下述两个函数声明没有明显的区别: extern int f(); 和int f(); 当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,比较习惯在所有的函数声明前添加extern修饰.
菏泽市13466389756: C语言中extern用法 - ?
范何石斛: #include "123.h"/*123.h中放你的其他函数*/ extern int func();/*这句跟用int func();一样,extern只起到标识作用,好让我们知道是外部函数而已*/ main() { …… } 你肯定是没加#include "123.h"吧,要是没有它,你的程序也不知道去哪找func()啊,不能光用extern
菏泽市13466389756: C语言中extern的用法 - ?
范何石斛: extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定.extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个...
菏泽市13466389756: C语言中,extern 一般在什么时候用.如何用 - ?
范何石斛: 声明的时候用,该变量已经在其他地方被定义,这里只需用extern声明即可
菏泽市13466389756: c语言中extern怎么用,举个简单例子说明下,谢谢. - ?
范何石斛: extern是外部声明用的,用来声明外部的函数或者变量定义.例如,你在1.C中定义了一个函数和变量: void fun1(void); int a = 0;而你要在2.c中调用 fun1(),并且读取a的值, 那么需要再2.c的头部如下外部声明: extern void fun1(void); extern int a = 0;这样的话在编译器在编译2.c时,不会报错误,而在链接时找fun1、a,以实现对外部函数、变量的访问.
菏泽市13466389756: c语言高手进,深究一下extern的用法?
范何石斛: 1.全局变量放在头文件里面必须使用extern关键字修饰,如果不这么做,想想,如果多个源文件包含这个头文件,那么展开头文件时就会发生重定义的错误,使用extern指出,只声明该变量可能不在此处定义,编译时,编译器将会寻找它的定义,如果在某处找到一个或多个定义,则会提示变量重定义的错误,如果未发现该变量的定义,则会提示变量未定义的错误. 2.条件编译适用于在不同情况下,来决定是引用变量还是定义变量,例如,在某些情况下,可以约定如果某个宏已定义,则标识某个变量已定义,那我们就可直接使用extern来引用它,如果宏未定义,则说明变量尚未定义,则需要定义该变量.
菏泽市13466389756: C语言中 extern 的用法,最好有示例,概念少说点?
范何石斛: extern我用了几次,主要是声明外部变量的作用,我用的也是在头文件中.比如说,你有一个project.c,lib.c,lib.h,三个文件,在lib.h里面有lib.c的变量定义,比如a[4]数组,也就是说这个变量是lib.c的全局变量,当我在project.c文件中要用到的时候...
菏泽市13466389756: c语言extern的用法 - ?
范何石斛: 你这里有几个问题我给你说下. 1,我把你的程序直接黏贴是编译不了的,就是有许多中文字符的符号,这个要注意,所有符号要在英文格式下输入. 2,你在main函数中并没有调用num()这个函数,也就是num()函数未被执行,所以即使...
菏泽市13466389756: C语言 extern - ?
范何石斛: 在头文件中声明函数时,前面的extern可有可无,只要这些函数曾在某个.c文件中实现就行了,不过一些函数没有在所包含的头文件中给出声明,同时函数的定义位于其它文件中,这时候使用该函数的.c文件必须用extern标记该函数为外部函数....