barriers / 阅读 / 详情

为什么extern申明函数后会no definition

2023-06-06 07:50:19
共1条回复
大鱼炖火锅

extern是全局变量声明

只要声明全局变量就默认 前面加extern(程序员可以不加,但编译器默认加上)

若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下

例如 #include "my_Fun.c"

extern int b;//b是在my_Fun.c中声明了的一个全局变量

这个extern 是个声明他可以在任何地方声明 引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)

这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了

相关推荐

c语言中的extern是什么,有什么作用啊?

说明要引用的变量是外部变量,函数是外部函数,就是非本文件中定义的。
2023-06-05 09:11:285

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

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

c语言中的extern怎么用?

extern在c中就是个外部申明,因为C是先申明再使用,当你想调用的变量或者函数不在你的模块当中,你可以使用外部申明。在使用外部申明的时候要特别注意,因为这只是个申明,并不是实体,当出现声明和实体不符的时候,编译器是不会管的,链接后就可能出现错误。比如你的实体是 int sample( int x ) ;而你在申明的时候是extern int sample( void ) ; 所以我不喜欢这种方式去声明。特别是多个人合作项目的时候,这种方法往往导致的结果很难去debug。即使是别人写好提供给你的,那他在修改了函数或者变量的类型,参数,往往会忘记修改给你的申明。extern 还有个作用就是当你C和C++混用的时候,比如在C++中要使用C, 那么就要告诉编译器,你这段代码使用的是C,需要用C的编译器去编译,那可以使用extern "C" { .........} 否则编译会有问题
2023-06-05 09:12:341

extern的意思是什么?

为不确定的外部符号,如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。意思是:没有找到这个函数的实现。连接错,这个_save_ts 肯定是声明,如果_save_ts 是一个函数的话,可能是你没有把.c或者.cpp文件加入工程。如果是一个全局变量,可能是你没有在.c或者.cpp文件中定义这个变量。解决方法:检查该函数的实现部分是否存在或包含该函数的lib文件是否正确的链接进代码中,查明错误后修正即可通过链接。扩展资料这个函数的.h文件格式如下:1. 在keil 编译器中,extern这个关键字即使不声明,编译器也不会报错,且程序运行良好,但不保证使用其它编译器也如此。强烈建议加上,养成良好的编程规范。2. .c文件中的函数只有其它模块使用时才会出现在.h文件中,像本地延时函数static void delay (uint us)即使出现在.h文件中也是在做无用功,因为其它模块根本不去调用它,实际上也调用不了它(static关键字的限制作用)。3.注意本句最后一定要加分号”;”,相信有不少同学遇到过这个奇怪的编译器报错: error C132: "xxxx": not in formal parameter list,这个错误其实是.h的函数声明的最后少了分号的缘故。参考资料来源:百度百科-lnk2001
2023-06-05 09:12:411

extern在c语言中是什么意思

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

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-05 09:13:091

extern是什么意思

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

在C语言中,extern的作用是什么?

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

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

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

extern怎么用?

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

C语言中,extern关键字怎么使用?最好解释清楚一点。

其实说简单点就是你有两个以上的.C文件,如果把一个变量或者函数声明为extern,例:在文件a.c中声明extern a;那么这个变量a,就可以在文件b.c中使用,否则在b.c中无法使用这个变量。
2023-06-05 09:14:142

c语言中的extern什么意思

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

extern在函数声明中是什么意思?

  extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用、记住。下列语句:  extern int a;  就是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。  extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。  如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:  extern int f(); 和int f();  当然,这样的用处还是有的,就是在程序中取代include“*.h”来声明函数,在一些复杂的项目中,可以在所有的函数声明前添加extern修饰。
2023-06-05 09:14:302

C++里extern是什么意思

xtern的作用是不包.h文件也能用,如果你函数在.h里面声明过,而且在其它.c文件里面你包括进来,就可以不用extern extern用法详解 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。 2 问题:extern 变量在一个源文件里定义了一个数组:char a[6];在另外一个文件里用下列语句进行了声明:extern char *a;请问,这样可以吗? 答案与分析: 1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。 2)、例子分析如下,如果a[] = “abcd”,则外部变量a=0×61626364 (abcd的ASCII码值),*a显然没有意义显然a指向的空间(0×61626364)没有意义,易出现非法内存访问。 3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。 4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。 4 问题:extern 函数2当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会照成系统错误,这种情况应该如何解决?答案与分析:目前业界针对这种情况的处理没有一个很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明,然后调用方include该头文件,从而省去extern这一步。以避免这种错误。宝剑有双锋,对extern的应用,不同的场合应该选择不同的做法。 5 问题:extern “C”在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?答案与分析:C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。下面是一个标准的写法://在.h文件的头上#ifdef __cplusplus#if __cplusplusextern “C”{#endif#endif /* __cplusplus */……//.h文件结束的地方#ifdef __cplusplus#if __cplusplus}#endif#endif /* __cplusplus */3 问题:extern 函数1常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用?答案与分析:如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:extern int f(); 和int f();当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。=========================================
2023-06-05 09:14:381

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-05 09:14:531

c语言extern关键字的作用

extern,"外部"的意思,可以引入外部函数,外部变量。也可以借此引用汇编程序。
2023-06-05 09:15:001

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

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

extern "c"是什么意思

extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。  (1) 被extern "C"限定的函数或变量是extern类型的  extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:  extern int a;  仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。  通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数。  与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。  (2) 被extern "C"修饰的变量和函数是按照C语言方式编译和连接的
2023-06-05 09:15:171

extern用法

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

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

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

extern怎么跨文件?详细解释

在另一个文件里定义的变量(需要是全局变量)在这个文件里要用就要在开头用extern再次声明比如1.cpp里有int a=10;要在2.cpp里用,2.cpp的全局变量里要写extern int a;
2023-06-05 09:15:512

C语言中,函数的隐含存储类别是 auto 还是 extern,为什么两种答案我都看到过

函数的存储类型指的是其他文件模块可否访问,其类别可以是extern或static。static是指该函数只能被本源程序文件中的模块访问。extern是指可被本源程序文件外的模块访问。C语言中函数的存储类型隐含为全局的,因此默认为extern。函数内定义的变量,默认作用域在本函数内,即其类型是auto。
2023-06-05 09:16:002

在C语言中头文件的extern是什么意思呢?

引用。比如在A文件有个int c 。b文件里面include l A文件。b里面就可以写 extern int c;来调用A里面的 c变量
2023-06-05 09:16:145

在单片机C语言中,extern void _pop_ (unsigned char _sfr)这个是什么意思?括号里是干吗的?

告诉你参数extern void _pop_extern是全局变量声明 viod也就是静态的至于pop应该是参数这句话表示:全局变量声明静态的方法_参数unsigned char意思是无符号字符型 表示:范围0~255sfr是数据类型与int,char等一样sfr的定义是特殊功能寄存器希望能够帮到你啦~
2023-06-05 09:16:302

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

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

c语言extern的用法

你是用num里面的复制的话那输出3的也是num里面的a如果想输出最外面的那个a那么num上面不用再定义一个a
2023-06-05 09:16:473

C++里extern是什么意思

extern是外部变量,当几个文件include到一起编译时就要用这个申明来共用变量
2023-06-05 09:16:541

在C语言中,extern的作用是什么?

在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:[extern]nbsp;nbsp;函数类型nbsp;nbsp;函数名(函数参数表){……}调用外部函数时,需要对其进行说明:[extern]nbsp;nbsp;函数类型nbsp;nbsp;函数名(参数类型表)[,函数名2(参数类型表2)……];[案例]外部函数应用。(1)文件mainf.cmain(){nbsp;nbsp;externnbsp;voidnbsp;input(…),process(…),output(…);input(…);nbsp;nbsp;process(…);nbsp;nbsp;output(…);}(2)文件subf1.c……externnbsp;nbsp;voidnbsp;input(……)nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;/*定义外部函数*/{……}(3)文件subf2.c……externnbsp;nbsp;voidnbsp;process(……)nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;/*定义外部nbsp;函数*/{……}(4)文件subf3.c……externnbsp;voidnbsp;output(……)nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;/*定义外部函数*/{……} 查看原帖>>
2023-06-05 09:17:352

C语言中extern用法

那个函数定义的时候就要加EXTERN的
2023-06-05 09:17:433

c++中 extern 是什么含义?

外部变量的意思
2023-06-05 09:17:537

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

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

外部变量的用extern声明外部变量

extern可省略不写。本文件里:在一个文件里,有不止一个函数,外部变量在第一个函数后面定义。若用extern在第一个函数前声明该变量则该变量可以在第一个函数中使用。多个文件中:在其他文件中若想要使用该文件中已声明的全局变量,则在其他文件头部声明该变量,即可使用该全局变量。file1.c file2.cint i,j; //定义全局变量 extern int i,j; //外部变量说明, extern可以省略char c; extern char c;void func() void func1(){ {i = 100; printf( i = %d, j = %d , i, j);j = 10;} }
2023-06-05 09:18:151

多文件操作C++程序时,extern函数一般放在哪个文件?有什么作用?

放在头文件里。用于被其他cpp文件调用
2023-06-05 09:18:282

C语言 函数声明前extern的用法?

好问题刚刚搜了一下extern是告诉编译器,当前的变量会在链接时的某个目标文件中出现函数默认是extern的,因此是冗余的最佳实践:假如有个模块叫x,在x.h里定义extern 变量,在x.c里定义变量的值英文好的话自己看网页链接
2023-06-05 09:18:372

C语言中extern关键字的作用

extern 关键字 声明一个“外部变量” 。有了这个声明,就可以从声明开始的地方,合法地使用该外部变量了。 在例1中,我们在最后才定义了外部变量 g_X , g_Y ,由于外部变量定义的位置在main函数之后,因此本来我们在main函数中是不能够引用 g_X , g_Y 的,因为在使用的时候并没有定义它们的数值。现在我们在main函数中用 extern 对它们进行“外部变量声明”,就可以从声明的位置起使用它们了。 对于多个文件的工程,都可以采用例2的方法。 对于模块化的程序文件,可以先预留好外部变量的接口,也就是只采用 extern 声明变量,而不定义变量值,像例2中的 max.c 中那样。变量值的定义留给使用者。 通常,这些外部变量的接口都是在模块程序的 头文件 中声明的。当需要使用该模块时,只需在使用时具体定义一下外部变量即可。比如main.c中的 g_X , g_Y 。 不过需要注意,由于用 extern 引用外部变量,可以在引用的模块内修改变量的值,因此如果有多个文件同时对引用的变量进行操作,并且可能会修改该变量,那么就会影响其他模块的使用。因此需要慎重使用。 总结 一般来说,头文件只能声明函数和变量,其定义只能在某个.c文件中
2023-06-05 09:18:441

C语言extern声明

不算错误吧,你的main.c中把a.c文件包含进来了,也就实现了msg函数
2023-06-05 09:18:544

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

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

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

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

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-05 09:20:151

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

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

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

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

《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-05 09:21:131

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

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

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

加上以后 外部函数可以调用该函数
2023-06-05 09:22:106

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

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

"extern ""c""作用"

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

第12个关键字应该是extern

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

函数内定义extern变量是怎么回事

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

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-05 09:23:131

为什么包含初始化式的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-05 09:23:202