extern 函数(C语言 extern)

本文目录
- C语言 extern
- 在C语言中,extern的作用是什么
- C++中extern是什么意思,用法
- extern在函数声明中是什么意思
- extern关键字对函数和变量的区别
- C语言中extern的意思是什么
- C函数前加extern是什么意思
- extern在c语言中是什么意思
- 《c语言》中“extern”怎么用
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的作用是什么
在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:外部函数应用。(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;/*定义外部函数*/{……}
C++中extern是什么意思,用法
extern表示声明一个在其他地方定义过的全局变量。
(a) extern string name; // name在其他地方定义了(通常是在别的文件中定义了,但也可以是本文件中定义的),在这仅仅是重新声明一下,不会重新定义一个新变量。
string name( "exercise 3.5a" ); // 定义了一个名为name的变量,并设置初始值为"exercise 3.5a"。
(b) extern vector《string》 students; // students在其他地方定义了(通常是在别的文件中定义了,但也可以是本文件中定义的),在这仅仅是重新声明一下,不会重新定义一个新变量。
vector《string》 students; // 定义一个名为students的变量。
extern在函数声明中是什么意思
它可以用作一种格式上的提示表明函数的定义可能在另一个源文件中, 但在
extern int f();
和
int f();
之间并没有实质的区别。
extern关键字对函数和变量的区别
extern 关键字适用于C变量(数据结构)和C函数。根本上来说,extern关键字扩展了C变量和C函数的可见性。这可能就是它被命名为extern的原因。
虽然大多数人可能理解变量或函数的“声明”和“定义”之间的区别,但为了完整起见,还是区分一下它们。
变量或函数可以 声明任意多次 ,但只能 定义一次 。(记住一个基本原则,即同一个变量或函数不能有两个位置)。
现在回到关键字 extern 。首先,我们考虑一下 extern 在函数中的使用。事实上,在声明或定义 函数 时,会隐式地假定 extern 关键字。当我们写:
编译器会将其视为:
由于 extern 关键字将函数的可见性扩展到了整个程序,因此可以在整个程序(项目)的任何文件中使用(调用)函数,只要这些文件包含了函数的声明。(函数声明就绪后,编译器就知道函数的定义存在于其他地方,然后继续编译文件)。这就是关于extern和函数的所有内容。
现在我们考虑extern和变量的使用。首先,如何在不定义变量的情况下声明变量?你可以这样做:
这里声明了一个名为 var 的整型变量(但是还没有定义它,所以到目前为止还没有为var分配内存)。我们想做多少次声明都可以。
如何定义var呢?你可以这样做:
在这一行中,一个名为var的整型变量被 声明和定义 (请记住定义是声明的超集)。因为这是一个定义,所以也为var分配了内存。
所以,区别来了。当我们声明/定义一个函数时,我们看到extern关键字隐式地出现了。但这不是变量的情况。想一下如果是,则永远不会为它们分配内存(后面针对var的内容都是使用它了)。因此,当我们希望 声明变量而不定义它们 时,需要显式地包含extern关键字。此外,由于extern关键字扩展了整个程序的可见性,通过在变量中使用extern关键字,只要包含了变量的声明(该变量在某一处定义),就可以在当前程序中的任何地方使用该变量。
现在我们用例子来理解extern。
示例1:
该程序会编译成功。var是全局定义(和隐式声明)的。
示例2:
该程序会编译成功。这里只声明var。但var从未使用过,所以不会出现问题。
示例3:
这个程序在编译时会抛出一个错误(链接错误),因为var没有在任何地方定义。实际上,var没有被分配任何内存,但程序试图将一个根本不存在的变量的值改为10。
示例4:
假设somefile.h包含var的定义,这个程序将成功编译。
例5:
你认为这个程序会编译成功吗?
这是C语言标准中的一个内容,如果一个变量只是被声明并且同时又被初始化了,那么该变量的内存也将被分配——换句话说,该变量将被认为是已定义的。因此,按照C语言标准,这个程序可以顺利编译并正常执行。
这就是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是什么意思
C函数前加extern表示该函数已经在其他文件中定义。
extern的定义:
extern是C,C++中的一个关键字。extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。
extern在c语言中是什么意思
extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。这里起到的是声明作用范围的用处。
extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数:
文档A.cpp调用a.c里面的变量i和函数callme()
扩展资料
C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。
实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故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,以实现对外部函数、变量的访问。

本文相关文章:
powerquery(power query中文含义是什么)
2026年9月21日 11:50
insert语句报错(php用insert语句向数据库插入数据时提示错误:)
2026年9月13日 14:40
webservice命名空间(webservice命名空间是什么)
2026年9月8日 20:30
plsql怎么新建连接(plsql developer怎么与oracle建立连接)
2026年9月3日 17:40
安装jupyter notebook步骤(jupyter noteBook安装(MacBook篇))
2026年8月31日 22:10
爱快docker是什么(爱快的docker 支持 cups吗)
2026年8月26日 17:30
update后面接什么(update为什么要加where exists)
2026年8月13日 19:00
kubernetes service(十分钟了解kubernetes的核心概念)
2026年8月12日 09:30
accessibility information翻译(英语作文 internet的优点)
2026年8月12日 06:00
unix系统是系统软件吗(powerpoint、word、UNIX和Excel哪个是系统软件)
2026年8月12日 02:30
更多文章:
androidapp源码免费下载(如何实现APK的反编译得到APK的源码)
2026年9月22日 18:00
service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)
2026年9月22日 10:20
html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)
2026年9月22日 10:10
结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)
2026年9月22日 09:40
cocos creator中文(cocoscreator和cocoscreator3d的区别)
2026年9月22日 02:30



