C语言中extern的用法

请详细叙述extern的用法 最好有具体的函数为例 谢谢

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

extern 变量
在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案与分析: 1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。 2)、例子分析如下,如果a[] = "abcd",则外部变量a=0x12345678 (数组的起始地址),而*a是重新定义了一个指针变量a的地址可能是0x87654321,直接使用*a是错误的. 3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。 4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

函数
extern 函数1 常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用? 答案与分析: 如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别: extern int f(); 和int f(); 当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。 extern 函数2 当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会照成系统错误,这种情况应该如何解决? 答案与分析: 目前业界针对这种情况的处理没有一个很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明,然后调用方include该头文件,从而省去extern这一步。以避免这种错误。 宝剑有双锋,对extern的应用,不同的场合应该选择不同的做法。 extern “C” 在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢? 答案与分析: C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。 下面是一个标准的写法: //在.h文件的头上 #ifdef __cplusplus #if __cplusplus extern "C"{ #endif #endif /* __cplusplus */ … … //.h文件结束的地方 #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */

参考资料:http://baike.baidu.com/view/963932.htm?fr=ala0_1_1

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-12-10

C语言中extern的用法
在C语言中,"extern"是一个关键的标识符,它用于指示变量或函数的定义位于其他源文件中。当在代码中遇到extern修饰的变量或函数时,编译器会在其他模块中查找其实际声明。以下是extern在不同情况下的用法和注意事项:1. 变量和函数声明:extern可以用于变量和函数的声明,提示编译器在其他文件中查找定义。...

c语言中extern的意思是什么?
在C语言中,`extern`是一个关键字,主要用于声明一个变量或函数是在其他文件中定义的。通过使用`extern`关键字,我们可以告诉编译器该变量或函数在其他地方已经定义,这里只是引用。这样,在编译时,编译器会确保链接到正确的位置以获取其实际的值或实现。二、变量声明与外部引用 当我们在一个文件中声明...

c语言extern
C语言中的`extern`关键字主要用于声明一个变量或者函数是在其他文件中定义的。使用`extern`关键字可以让编译器知道该变量或函数的存在,这样在当前文件中就可以使用它。具体来说,`extern`主要用于在头文件和实现文件之间建立联系。详细解释:在C语言中,`extern`是一个存储类说明符,它告诉编译器某个变...

extern在c语言中是什么意思?
总的来说,extern关键字在C语言中用于指示一个变量或函数是在其他文件或模块中定义的,这在大型项目中促进代码的组织和模块化开发时非常有用。通过使用extern,程序员可以在不同的文件中共享数据和功能,从而提高代码的可维护性和重用性。

c语言中extern在函数声明中是什么意思?
在C语言中,extern关键字用于声明变量或函数,表示该变量或函数的实际存储或实现在其他地方,但可以在当前文件中使用。简单来说,extern就是一种声明机制,告诉编译器该变量或函数在其他地方已经定义,这里只是引用。2. 在函数声明中的应用 当我们在一个文件中使用extern关键字声明一个函数时,我们告诉编译...

c语言中extern的意思是什么??
1. extern的基本含义 在C语言中,extern关键字用于声明一个变量是在其他文件中定义的。通过使用extern关键字,可以在当前文件中引用在其他地方定义的变量。这意味着,你可以在一个文件中声明一个变量,并在另一个文件中定义和初始化它。这使得代码的组织更加灵活,便于模块化的编程。2. extern的使用场景...

c语言中的extern是什么,有什么作用啊?
在C语言中,extern是一个关键字,它的主要作用是标识函数或变量的定义在当前编译单元之外。具体来说,它有以下两个应用场景:首先,当你在某个C文件中声明一个函数,如:extern void add(int x, int y);,这意味着这个函数的实现并不在这个文件里,而是在另一个文件中定义。这样做有助于代码的...

extern的详解
extern的详解:extern是c语言中的一个关键字,一般用在变量名前或函数名前,作用是用来说明此变量\/函数是在别处定义的,要在此处引用。如果在所有函数之外定义的变量没有指定其存储类别,那么它就是一个外部变量,它的作用域是从它的定义点到本文件的末尾。在单个源文件中的确是这样,如果有多个源文件...

C语言关键字extern详解
大家好!今天继续分享C语言关于全局变量的报错问题。问题一:extern修饰全局变量的正确用法和链接错误解决。extern用于声明全局变量,声明可以有无限次,但定义仅需一次。若仅声明未定义,将导致链接错误。定义extern修饰变量时需确保作用域匹配,即在头文件声明后,定义只能在函数外部,否则会报错。在函数外部...

C语言中 extern 的用法,最好有示例,概念少说点
你好!extern 用于扩展定义的全局变量的作用域,一般定义的全局变量的作用域为定义的位置起到函数结束,当要在定义全局变量的位置之前或其他源文件中引用该全局变量时,就需要在使用的函数中或源文件中用extern来扩展该全局变量的作用域,如:include main(){int num(int x);int b=3,c;c=num(b);p...

相似回答