c语言中的extern什么意思

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

c语言中extern_c语言中extern是什么意思c语言中extern_c语言中extern是什么意思


c语言中extern_c语言中extern是什么意思


c语言中extern_c语言中extern是什么意思


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

在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:

[extern] 函数类型 函数名(函数参数表)

{……}

调用外部函数时,需要对其进行说明:

[extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];

[案例]外部函数应用。

(1)文件mainf.c

main()

{ extern void input(…),process(…),output(…);

input(…); process(…); output(…);

}

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;/定义外部函数/{……}

extern在c语言中是什么意思

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

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

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

相关内容:

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

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

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

《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,以实现对外部函数、变量的访问。

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文件中

c语言中的extern怎么用?

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

extern 还有个作用就是当你C和C++混用的时候,比如在C++中要使用C, 那么就要告诉编译器,你这段代码使用的是C,需要用C的编译器去编译,那可以使用extern "C" { .........} 否则编译会有问题