您当前的位置:首页 > 互联网教程

C语言中extern的意思是什么

发布时间:2025-05-12 22:03:16    发布人:远客网络

C语言中extern的意思是什么

一、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”链接指示后,上面的代码就能够正常运行了。

二、C语言中extern关键字的作用

1、 extern关键字声明一个“外部变量”。有了这个声明,就可以从声明开始的地方,合法地使用该外部变量了。

2、在例1中,我们在最后才定义了外部变量 g_X, g_Y,由于外部变量定义的位置在main函数之后,因此本来我们在main函数中是不能够引用 g_X, g_Y的,因为在使用的时候并没有定义它们的数值。现在我们在main函数中用 extern对它们进行“外部变量声明”,就可以从声明的位置起使用它们了。

3、对于多个文件的工程,都可以采用例2的方法。

4、对于模块化的程序文件,可以先预留好外部变量的接口,也就是只采用 extern声明变量,而不定义变量值,像例2中的 max.c中那样。变量值的定义留给使用者。

5、通常,这些外部变量的接口都是在模块程序的头文件中声明的。当需要使用该模块时,只需在使用时具体定义一下外部变量即可。比如main.c中的 g_X, g_Y。

6、不过需要注意,由于用 extern引用外部变量,可以在引用的模块内修改变量的值,因此如果有多个文件同时对引用的变量进行操作,并且可能会修改该变量,那么就会影响其他模块的使用。因此需要慎重使用。

7、一般来说,头文件只能声明函数和变量,其定义只能在某个.c文件中

三、extern在c语言中是什么意思

1、extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。

2、extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:

3、文档A.cpp调用a.c里面的变量i和函数callme()

4、C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。

5、实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。