汉邦问答 / 问答 / 问答详情

全局变量的外部声明可以省略extern吗

2023-06-10 08:18:23
善士六合

局部位置声明全局变量,不可以省略存储类型说明符extern,特别需要注意的一点是在局部位置声明全局变量时,不能对全局变量进行初始化操作

什么时候定义变量使用“extern”?

首先纠正你的一个错误,extern是用来声明变量而不是定义变量的当你需要在一个c语言文件中使用另外一个c语言文件中定义的变量时就需要加上extern来声明,这样编译器就知道这个变量是在别的文件中定义的。比如:你在foo.c中定义了一个全局变量int a=10,你在fff.c中想使用这个变量a,那么你就需要在使用之前在fff.c中用extern声明这个变量。extern int a;
2023-06-09 18:25:041

extern是什么意思

extern是全局变量声明只要声明全局变量就默认 前面加extern(程序员可以不加,但编译器默认加上)若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下例如 #include "my_Fun.c" extern int b;//b是在my_Fun.c中声明了的一个全局变量 这个extern 是个声明他可以在任何地方声明 引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了
2023-06-09 18:25:131

C语言 extern

在C语言中,变量和函数都有数据类型和存储类型两个属性,因此变量定义的一般形式是 {存储类型 数据类型 变量名} C语言种提供了以下四种不同的存储类型 那么我们所说的extern就是存储类型的一种。extern修饰的变量存储位置在全局静态存储区。 标准的定义格式: extern 类型名 变量名; 通俗来说,如果使用extern修饰了一个变量或者函数,那么这个函数或者变量就变成了全局变量,在除定义该变量or函数的文件外仍然有效。不过需要注意的是,使用extern进行修饰是对该变量or函数进行声明,并没有分配内存。 如果在a.c中需要引用b.c中的int i,那么可以在a.c中使用extern int i进行声明。并且,能够被其他模块以extern修饰符引用的变量通常是全局变量。并且extern int i可以被放在a.c中的任何位置,区别只是在a.c中作用域的问题。 从本质上来说,并没有什么区别。函数名字本质上是一个指向二进制块开头处的指针。如果a.c中需要引用b.c中的函数,如b.c中原型是int fun(int mu),那么在a.c中声明extern int fun(int mu)那么就可以在a.c中用fun做事。 但是对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。 那么使用extern和包含头文件来引用函数有什么区别如下: ① 使用extern的引用比包含头文件要简介的多。extern使用直截了当,引用哪个函数直接extern进行声明即可。这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。 ② include本质上是把include进来的这个文件原封不动的搬到当前文件中 a.c b.c
2023-06-09 18:25:231

C语言中全局变量说明符extern该如何使用?

函数和变量都有声明和定义两个写法。声明的目的是告诉别的代码这个变量的名称,而定义比声明多了一个功能,除了告知名称以外,还会为这个变量分配内存。对于函数来说,加不加extern都没有关系,因为有函数体一定是定义,加extern也会被忽略,而没有函数体的就是声明,int add(int a, int b); 等价于 extern int add(int a, int b);int add(int a, int b) { return a + b; } 等价于 extern int add(int a, int b) {return a+b;}如果是变量的话int a; // 定义了一个变量aextern int a; // 声明了一个变量a变量可以有任意个声明,但是只能有一个定义,全局变量定义在多个文件中,只能有一个文件中的不加extern,其余的都必须加extern表示声明。
2023-06-09 18:25:314

C++中定义变量的时候用extern有什么用?

在全局范围:int i;这是定义,定义i,初始化为0。int i = 1;这是定义,定义i,初始化为1。extern int i = 1;这是定义,定义i,初始化为1。extern int i;这是声明,声明有一个变量i,它的定义可能在其它文件中。每个变量定义只能有一处。最好使每个变量都有且仅有一处定义。extern int i = 1;作用和int i = 1;没有区别,只是显式地提醒程序员i可能会在其它文件里用到。
2023-06-09 18:25:456

.h中的extern变量

兄弟,你是想试试几个文件连在一起如何用吧,呵呵!你试着把三个文件中的这个extern delta,a,b,c;改成extern float delta;extern int a,b,c;就是连它的类型也要声明哦!
2023-06-09 18:25:593

请教extern的作用

extern表示是外部函数或外部变量,比如:1、extern void add(int x,inty);表示该函数主体不在当前模块中,在另一个模块中(文件)2、extern int total;表示该变量在另一个模块总定义过。一般都把一些经常用到的枚举和变量之类的写在.h头文件中。这样要引用时直接include "头文件名"就可以了调用里面所有的枚举和变量了。在大型项目中,引用别的.c文件中的函数则只能用extern,因为.c文件是不能 include的。所以想引用别的.c文件中的函数和全局变量、枚举等等的就只能用extern。
2023-06-09 18:26:061

用extern修饰全局变量

a = 5b = 25`````上面是函数里面的输出····下面是主函数的输出·····a = 5b = 15因为楼主你在函数体里面都有另外定义x y,所以你在函数体外面定义的自动被屏蔽了...
2023-06-09 18:26:132

extern怎么用?

常见用法:1 声明变量或函数前加extern是用来告诉编译器这个变量或函数可能定义在其它文件模块中的。加extern声明的变量并不会真正分配存储空间,它表明这个变量必须是在别处定义过的,在这个文件中被共享的。2 在C++程序中,调用被C编译器编译后的函数,要加extern“C”声明。 因为 C和C++ 语言的编译规则不一样,通过extern“C”告诉编译系统哪些函数是用C 方式编译,哪些函数需要用C++ 方式编译。
2023-06-09 18:26:362

嵌入式—C语言—全局变量和extern的用法

extern是声明外部变量,正如它的英文名字一样,你可以在其他文件当中使用它
2023-06-09 18:26:453

extern可以定义局部变量吗?谢谢啦

不能!!!你说的是定义?还是声明?定义的时候,extern表示外部文件可以使用它,当然它至少得是全局的;全局变量默认是加上了extern的,与之相对的是static,它定义的全局变量,外部文件不能使用。声明的时候,它起一个扩展作用域的作用,它至少还是全局的,同一文件中,存在一个后面定义的全局变量,在文件开头添加一个extern的声明,前面的代码也可以使用这个变量了;其他的文件,在添加extern声明后,也可以使用它了。extern定义一个变量,与之相反的是static来定义,前者表示其他文件可以使用,后者表示其他文件不能使用。这些说的都是全局变量。局部变量定义的时候加上static是另外一个意思了,说的是该变量的存活期的问题,一直存在;这种情况下,没有extern的说法。
2023-06-09 18:26:521

c++中 用extern声明外部变量时能不能给变量赋初值

一楼正解!
2023-06-09 18:27:023

C++中extern是什么意思,用法?

extern表示是外部函数或外部变量,比如:1、extern void add(int x,inty);表示该函数主体不在当前模块中,在另一个模块中(文件)2、extern int total;表示该变量在另一个模块总定义过。
2023-06-09 18:27:112

extern在c语言中是什么意思?

是一个修饰符。在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。可以通过把原函数名与参数信息结合,产生一个独特的内部名字:这种技术叫做名字修饰(Name Mangling)。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。下面是一组函数,其中f()函数重载了:f(void)和f(int)是不同的函数,除了函数名相同以外没有任何关系。当生成obj目标文件时,为了区分它们,C++编译器根据参数信息进行了名字修饰:
2023-06-09 18:27:351

c++中 用extern声明外部变量时能不能给变量赋初值

一楼正解!
2023-06-09 18:28:153

extern在c语言中是什么意思?

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:文档A.cpp调用a.c里面的变量i和函数callme()扩展资料C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
2023-06-09 18:28:241

static和extern的区别

这个一楼的回答差了一些哦。有几种情况:首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”static会定义一个变量,但是分成多种情况。---------------------------------------------------------------------先说extern 和 变量的关系。先说只有一个文件(编译单元)的:int i=10; //这个是定义一个全局变量,值为10extern 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里就是错误的种子,以后它只能得到苦果!
2023-06-09 18:28:371

VC++中创建了一个工程,里面有n个头文件,如何在一个头文件中使用另一个头文件中的全局变量?谢谢!

加 extern
2023-06-09 18:28:457

extern 外部变量可以在动态链接库之间起作用吗?

假设有两个动态链接库libA.dylib、libB.dylib(或者*.so、*.dll),有一个公共头文件HelloGlobal.h,里面有一个extern int GlobalInteger变量,而libA的作用是设置变量的值、libB获得值(setter / getter); HelloGlobal.h #ifndef __HELLO_GLOBAL_H__ #define __HELLO_GLOBAL_H__ extern int GlobalInteger; #endif // __HELLO_GLOBAL_H__ libA.h #ifndef __LIB_A_H__ #define __LIB_A_H__ void SetGlobalInteger(); #endif // __LIB_A_H__ libA.c #include "LibA.h" #include "HelloGlobal.h" int GlobalInteger; void SetGlobalInteger() { GlobalInteger = 101; } libB.h #ifndef __LIB_B_H__ #define __LIB_B_H__ void GetGlobalInteger(); #endif // __LIB_B_H__ libB.c #include #include "LibB.h" #include "HelloGlobal.h" int GlobalInteger; void GetGlobalInteger() { printf("%s, line %d GlobalInteger %d ", __FILE__, __LINE__, GlobalInteger); } HelloGlobal.c #include #include "HelloGlobal.h" #include "libA.h" #include "libB.h" #include "ExternFile.h" int GlobalInteger; int main() { SetGlobalInteger(); GetGlobalInteger(); ExternSetGlobalInteger(); printf("GlobalInteger %d ", GlobalInteger); return 0; } extern变量在libA和libB动态链接库之间不能作用于“外部”,而使用外部源头件ExternFile.h可以使extern变量作用于外部;动态链接库之间类似进程之间的通讯 ^_^
2023-06-09 18:29:001

extern是在定义变量时用还是引用变量是用

extern只是申明吧在c里面应该只是申明
2023-06-09 18:29:152

C语言中变量存储static和extern两个关键字的作用分别是什么

在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。(1)修饰局部变量一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次。如:#include<stdio.h>void fun(){staticint a=1;a++;printf("%d ",a);}int main(void){fun();fun();return0;}程序执行结果为: 23说明在第二次调用fun()函数时,a的值为2,并且没有进行初始化赋值,直接进行自增运算,所以得到的结果为3.对于静态局部变量如果没有进行初始化的话,对于整形变量系统会自动对其赋值为0,对于字符数组,会自动赋值为"".(2)修饰全局变量对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)。如:有file1.cint a=1;file2.c#include<stdio.h>extern int a;int main(void){printf("%d",a);return 0;}则执行结果为 1但是如果在file1.c中把int a=1改为static int a=1;那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰改变了其作用域的范围,由原来的整个工程可见变为本源文件可见。(3)修饰函数用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域。extern关键字在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。在上面的例子中可以看出,在file2中如果想调用file1中的变量a,只须用extern进行声明即可调用a,这就是extern的作用。在这里要注意extern声明的位置对其作用域也有关系,如果是在main函数中进行声明的,则只能在main函数中调用,在其它函数中不能调用。其实要调用其它文件中的函数和变量,只需把该文件用#include包含进来即可,为啥要用extern?因为用extern会加速程序的编译过程,这样能节省时间。
2023-06-09 18:29:221

c++中的external function什么意思

在C++中external function是外部函数的意思,而外部函数有两种理解.(1)库函数是C语言的内部函数或自带函数,外部函数即程序员自定函数.(2)凡加写了extern 的函数是外部函数.
2023-06-09 18:29:542

extern 只是用来声明全局变量

extern只是外部引用,不能用来定义。假如用extern定义的话,编译不会报错,链接时会出错,extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
2023-06-09 18:30:011

C语言中全局变量的作用范围?及全局变量和extern定义变量的区别?

顾名思义啊
2023-06-09 18:30:085

c语言中extern怎么用,举个简单例子说明下,谢谢。

一般是在一个文件A中对于其他文件中的全局变量或者全局函数需要调用时,先在文件的开头extern一下,相当于在A文件中声明了其他文件中的变量和函数,使得这个变量和函数在这个文件中就可以使用了。例如在文件a.c中有个变量x,一个函数b();你在文件b.c中想要使用这个变量x和函数b(),只需要在b.c文件的开头extern一下这个变量就可以了。
2023-06-09 18:30:242

C语言extern向程序说明变量在其他地方定义了,这个“其他地方”是指哪儿呢?

在该工程下其他的文件中,比如f1.c要用f2.c中的一个变量,就要在f1.c中用extern声明该变量。
2023-06-09 18:30:351

c语言中的extern什么意思

extern是全局变量声明,只要声明全局变量就默认 前面加extern(程序员可以不加,但编译器默认加上)若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下。 例如 #include "my_Fun.c" extern int b;//b是在my_Fun.c中声明了的一个全局变
2023-06-09 18:30:421

extern用法

声明该变量来自外部文件,不需要在此定义
2023-06-09 18:30:492

第12个关键字应该是extern

extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。
2023-06-09 18:30:561

c语言中extern的意思是什么??

extern是全局变量声明只要声明全局变量就默认 前面加extern(程序员可以不加,但编译器默认加上)若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下例如 #include "my_Fun.c"extern int b;//b是在my_Fun.c中声明了的一个全局变量这个extern 是个声明他可以在任何地方声明 引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了
2023-06-09 18:31:207

什么时候定义变量使用“extern”?

首先纠正你的一个错误,extern是用来声明变量而不是定义变量的x0dx0ax0dx0a当你需要在一个c语言文件中使用另外一个c语言文件中定义的变量时就需要加上extern来声明,这样编译器就知道这个变量是在别的文件中定义的。x0dx0a比如:你在foo.c中定义了一个全局变量int a=10,你在fff.c中想使用这个变量a,那么你就需要在使用之前在fff.c中用extern声明这个变量。extern int a;
2023-06-09 18:32:031

C语言中extern i=3是声明,还是定义,这应该是定义吧,那extern什么意思呢?谢谢了

extern是全局变量声明只要声明全局变量就默认 前面加extern(程序员可以不加,但编译器默认加上)若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下例如 #include "my_Fun.c" extern int b;//b是在my_Fun.c中声明了的一个全局变量 这个extern 是个声明他可以在任何地方声明 引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了
2023-06-09 18:32:101

C语言中extern的意思是什么

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:文档A.cpp调用a.c里面的变量i和函数callme()拓展资料1、可以通过把原函数名与参数信息结合,产生一个独特的内部名字,这种技术叫做名字修饰(Name Mangling)。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。下面是一组函数,其中f()函数重载了:f(void)和f(int)是不同的函数,除了函数名相同以外没有任何关系。当生成obj目标文件时,为了区分它们,C++编译器根据参数信息进行了名字修饰:2、C语言中没有名字修饰(Name Mangling),因为C语言不支持函数重载。但是如果C++中含有C代码,在编译时C++编译器对C代码的函数也会进行名字修饰,函数名变了以后,将导致在C运行库中找不到对应函数,发生链接错误。为了防止C++编译器对C代码进行名字修饰,我们将C代码用extern “C”进行链接指定,告诉编译器,在生成中间文件时,不要对这部分代码进行名字修饰,而是生成符合C规则的中间符号名。添加了extern “C”链接指示后,上面的代码就能够正常运行了。
2023-06-09 18:32:171

C函数前加extern是什么意思?

C函数前加extern表示该函数已经在其他文件中定义。extern的定义:extern是C,C++中的一个关键字。extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。
2023-06-09 18:32:521

C语言中,extern 修饰函数是什么意思?

加上以后 外部函数可以调用该函数
2023-06-09 18:33:026

"extern ""c""作用"

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:文档A.cpp调用a.c里面的变量i和函数callme()相关内容:C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
2023-06-09 18:33:211

C函数前加extern是什么意思?

C函数前加extern表示该函数已经在其他文件中定义。extern的定义:extern是C,C++中的一个关键字。extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。
2023-06-09 18:33:331

为什么包含初始化式的extern声明不能位于函数内

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。1. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明extern int v,还取决于变量v本身是能够被引用到的。这涉及到c语言的另外一个话题--变量的作用域。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern int v,然后就可以引用到变量v了,只不过这样只能在函数fun作用域中引用v罢了,这还是变量作用域的问题。对于这一点来说,很多人使用的时候都心存顾虑。好像extern声明只能用于文件作用域似的。2. extern修饰函数声明。从本质上来讲,变量和函数没有区别。函数名是指向函数二进制块开头处的指针。如果文件a.c需要引用b.c中的函数,比如在b.c中原型是int fun(int mu),那么就可以在a.c中声明extern int fun(int mu),然后就能使用fun来做任何事情。就像变量的声明一样,extern int fun(int mu)可以放在a.c中任何地方,而不一定非要放在a.c的文件作用域的范围中。对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。使用extern和包含头文件来引用函数有什么区别呢?extern的引用方式比包含头文件要简洁得多!extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。这大概是KISS原则的一种体现吧!这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。3. 此外,extern修饰符可用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同
2023-06-09 18:33:402

extern在c语言中是什么意思

extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:文档A.cpp调用a.c里面的变量i和函数callme()相关内容:C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
2023-06-09 18:33:481

《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,以实现对外部函数、变量的访问。
2023-06-09 18:34:141

关于C++中extern全局变量的问题

LPINTERINFOg_lpInterInfo=newINTERINFO;=>g_lpInterInfo=newINTERINFO;试试看。上面的写法可能是在本CPP的某个函数里面又申请了一个局部变量。没有改变那个全局变量。如果一定要重名,使用:::g_lpInterInfo=newINTERINFO;
2023-06-09 18:34:211

static和extern的区别

有几种情况:首先,extern和static完全不同,extern不能定义一个变量,extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”static会定义一个变量,但是分成多种情况。---------------------------------------------------------------------先说extern和变量的关系。先说只有一个文件(编译单元)的:inti=10;//这个是定义一个全局变量,值为10externinti=10;//这个是错误的,变量已经存在,怎么赋初值呢?externinti;//这个和第一句inti=10;可以同时存在在一个文件中。再说跨文件(多个编译单元)的:文件一:(假设这个文件没有错误!!)inta=10;文件二:externinta;//这个正确externfloata;//这个编译不会错,赋值会怎样呢?externintb;//这个找不到inta=9;//这个出错,全局变量多次定义inta;//同上staticinta=9;//这个正确,这个产生一个仅在文件二中有效的全局变量a,初值为9,注意在文件二中将看不到那个值为10的全局变量!!!!static就是刚才说的最后一种,此外就是函数内的使用了,不再多说了。特别的,这样是错误的:a.c:staticintx=10;b.c:externintx;//因为x只在a.c中,b.c中根本看不到x,所以这个extern还是找不到x,因此会在链接时报错。其他:extern尽量写到.h文件中,写到.c里就是错误的种子,以后它只能得到苦果!
2023-06-09 18:34:281

extern修饰的外部变量可以随意改变其值吗

可以改变。定义为全局变量。
2023-06-09 18:34:381

一外部变量在其它文件中用extern来声明,其它文件中没有extern,就不会访问该变量,那么static 的意义何在

static 是静态变量,是全局变量,变量的作用域在整个程序运行时都一直有效。而extern用到的情况是局部变量情况,局部变量的作用域在该子程序里头,子程序结束他的申请空间就释放出来,有时用extern将子程序里头的局部变量的作用域引出来,使该局部变量的作用域继续有效
2023-06-09 18:34:462

c++ extern的用法,extern全局变量和static,const的的区别

extern 主要是作用域,一个文件一个作用域。static作用域是 本文件。 static 在类中也是只属于这个类,所有的对象。const只是一个编译器实现的常数。语义常数。多看代码就知道了。很多人对这个的理解不一样。多调程序就明白其中的机制了。有人说生命周期。有人说文件能否访问,我觉得就是东西在不在的问题。不必吹毛求疵
2023-06-09 18:34:531

c++ extern mt 变量, 请问mt代表什么意思?

extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义mt在别处被定义过,这里只是声明有这么一个东西
2023-06-09 18:35:001

.h与.c文件变量引用问题

你在编译器上试试就清楚了。。。结果是:可以。
2023-06-09 18:35:084

通达信externvalue怎么使用

全局变量区分静态全局变量和全局变量两种。1 静态全局变量。有static修饰的变量为静态全局变量。需要定义在函数外,可以在定义位置到本文件结束部分使用。定义格式为static type var=init_value;作用为定义一个类型为type,变量名为var的静态全局变量,并赋初始化值为init_value。当=init_value部分被省略时,系统自动初始化为0值。可以用extern扩展可使用空间,声明格式为extern type var;注意不可以有初始化值。extern声明只允许出现在本文件内,声明后,可以在声明语句到文件尾使用该变量。2 全局变量。没有static修饰的变量为全局变量。需要定义在函数外,可以在定义位置到本文件结束部分直接使用。定义格式为type var=init_value;作用为定义一个类型为type,变量名为var的全局变量,并赋初始化值为init_value。当=init_value部分被省略时,系统自动初始化为0值。要在文件其它位置或其它文件中使用时,需要用extern进行声明,声明格式为extern type var;注意不可以有初始化值。声明后,可以在声明语句到声明语句所在文件尾使用该变量。也可以写在头文件中,这样在引用该头文件的C文件中,可以在引用位置到文件结尾使用该变量。
2023-06-09 18:35:171

C语言:用extern和不用extern声明方法有什么区别?

是这样的如果你想定义一个静态函数要在函数返回值类型前加static如果你想定义一个外部函数要在函数返回值类型前加extern(可省略)也就是说默认为extern的
2023-06-09 18:35:382

static和extern的区别

static:一、在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。1、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。a.在全局数据区分配内存。b.如果没有初始化,其默认值为0.c.该变量在本文件内从定义开始到文件结束可见,且在外部文件不可见. 2、定义局部静态变量:在局部变量前面加上关键字static,其特点如下:a.该变量在全局数据区分配内存。b.它始终驻留在全局数据区,直到程序运行结束。c. 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。 3、定义静态函数:在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:a.静态函数只能在本源文件中使用b.在文件作用域中声明的inline函数默认为static类型二、在C++中新增了两种作用:定义静态数据成员或静态函数成员。静态数据成员:a.内存分配:静态数据成员在程序的全局数据区去分配。b.初始化和定义: 静态数据成员必须在类定义外初始化,但const静态数据成员除外,const静态数据成员可以在类体中初始化(也可以像非const一样在类外初始化)。例如: class c1{public:private:static int num;static const string name = "chio";};int c1::num = 20;//没有const修饰的静态成员数据,必须类外定义并且初始化静态函数成员:类成员函数(无论是static成员函数或非static成员函数)都可以直接访问static数据成员,但是static成员函数只能访问static数据成员。并且可以通过类名直接调用. extern:extern可以置于变量或函数前,以在别的文件中标识变量或函数的定义,并提示编译器遇到此变量或函数时在其他模块中寻找其定义.extern在局部函数中声明时,表示此变量,在局部函数外(包括函数外,和文件外).extern声明的变量(即文件公用的变量)最好放在头文件中对于extern变量来说,仅仅是一个变量的声明,其并不是定义,不会分配内存空间。 extern表示将变量或函数声明为外部链接,变量默认是内部链接,函数默认是外部链接。因此用来外部链接的函数,声明时有无extern都可以连接通过。而全局变量则不行。通常,在模块的头文件中,对本模块提供给其他模块引用的函数和全局变量以关键字extern声明。
2023-06-09 18:35:461