extern 函数(C语言 extern)

:暂无数据 2026-07-02 16:10:01 3

extern 函数(C语言 extern)

大家好,关于extern 函数很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于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,以实现对外部函数、变量的访问。

OK,关于extern 函数和C语言 extern的内容到此结束了,希望对大家有所帮助。

extern 函数(C语言 extern)

本文编辑:admin

本文相关文章:


powerquery(power query中文含义是什么)

powerquery(power query中文含义是什么)

其实powerquery的问题并不复杂,但是又很多的朋友都不太了解power query中文含义是什么,因此呢,今天小编就来为大家分享powerquery的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年9月21日 11:50

insert语句报错(php用insert语句向数据库插入数据时提示错误:)

insert语句报错(php用insert语句向数据库插入数据时提示错误:)

大家好,如果您还对insert语句报错不太了解,没有关系,今天就由本站为大家分享insert语句报错的知识,包括php用insert语句向数据库插入数据时提示错误:的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月13日 14:40

webservice命名空间(webservice命名空间是什么)

webservice命名空间(webservice命名空间是什么)

大家好,今天小编来为大家解答以下的问题,关于webservice命名空间,webservice命名空间是什么这个很多人还不知道,现在让我们一起来看看吧!

2026年9月8日 20:30

plsql怎么新建连接(plsql developer怎么与oracle建立连接)

plsql怎么新建连接(plsql developer怎么与oracle建立连接)

各位老铁们,大家好,今天由我来为大家分享plsql怎么新建连接,以及plsql developer怎么与oracle建立连接的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,

2026年9月3日 17:40

安装jupyter notebook步骤(jupyter noteBook安装(MacBook篇))

安装jupyter notebook步骤(jupyter noteBook安装(MacBook篇))

其实安装jupyter notebook步骤的问题并不复杂,但是又很多的朋友都不太了解jupyter noteBook安装(MacBook篇),因此呢,今天小编就来为大家分享安装jupyter notebook步骤的一些知识,希望可以帮助到

2026年8月31日 22:10

爱快docker是什么(爱快的docker 支持 cups吗)

爱快docker是什么(爱快的docker 支持 cups吗)

各位老铁们,大家好,今天由我来为大家分享爱快docker是什么,以及爱快的docker 支持 cups吗的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年8月26日 17:30

update后面接什么(update为什么要加where exists)

update后面接什么(update为什么要加where exists)

本篇文章给大家谈谈update后面接什么,以及update为什么要加where exists对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年8月13日 19:00

kubernetes service(十分钟了解kubernetes的核心概念)

kubernetes service(十分钟了解kubernetes的核心概念)

大家好,关于kubernetes service很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于十分钟了解kubernetes的核心概念的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站

2026年8月12日 09:30

accessibility information翻译(英语作文 internet的优点)

accessibility information翻译(英语作文 internet的优点)

“accessibility information翻译”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看accessibility information翻译(英语作文 internet的优点)!

2026年8月12日 06:00

unix系统是系统软件吗(powerpoint、word、UNIX和Excel哪个是系统软件)

unix系统是系统软件吗(powerpoint、word、UNIX和Excel哪个是系统软件)

本篇文章给大家谈谈unix系统是系统软件吗,以及powerpoint、word、UNIX和Excel哪个是系统软件对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘

2026年8月12日 02:30

更多文章:


androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

本篇文章给大家谈谈androidapp源码免费下载,以及如何实现APK的反编译得到APK的源码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 18:00

security的反义词(risk的反义词)

security的反义词(risk的反义词)

大家好,今天小编来为大家解答以下的问题,关于security的反义词,risk的反义词这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 15:40

二郎神杨戬简笔画(二郎神怎么画)

二郎神杨戬简笔画(二郎神怎么画)

本篇文章给大家谈谈二郎神杨戬简笔画,以及二郎神怎么画对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:50

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

大家好,关于service pack 3很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思的知识点,相信应该可以解决大家的一

2026年9月22日 10:20

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

本篇文章给大家谈谈html代码怎么写大佬教程,以及html网页的题来个大佬,写代码,题目在图上对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:10

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

本篇文章给大家谈谈结构体内又一个struct,以及c++ 在结构体中再嵌入一个结构体如何调用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 09:40

next是什么意思英语(next是什么单词)

next是什么意思英语(next是什么单词)

本篇文章给大家谈谈next是什么意思英语,以及next是什么单词对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 07:50

美国参议院人数(美国每个州的议员人数取决于什么)

美国参议院人数(美国每个州的议员人数取决于什么)

大家好,今天小编来为大家解答以下的问题,关于美国参议院人数,美国每个州的议员人数取决于什么这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 05:20

高中信息技术python(高考信息技术用的是什么语言)

高中信息技术python(高考信息技术用的是什么语言)

今天给各位分享高考信息技术用的是什么语言的知识,其中也会对高考信息技术用的是什么语言进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月22日 02:50

cocos creator中文(cocoscreator和cocoscreator3d的区别)

cocos creator中文(cocoscreator和cocoscreator3d的区别)

各位老铁们好,相信很多人对cocos creator中文都不是特别的了解,因此呢,今天就来为大家分享下关于cocos creator中文以及cocoscreator和cocoscreator3d的区别的问题知识,还望可以帮助大家,解决大家的

2026年9月22日 02:30

最近更新

网站设计软件哪个适合新手使用
2026-09-22 22:05:03 浏览:0
如何做网站seo新手入门教程?
2026-09-22 22:04:03 浏览:0
热门文章

wait for you杨和苏(大家听下(wait for you)这首英文歌的开头那段音乐)
2026-06-13 16:20:04 浏览:22
刷关键字排名怎么操作最有效?
2026-09-14 20:02:13 浏览:14
oppo a9拆机教程(oppoa9拆机教程)
2026-06-13 10:40:02 浏览:12
标签列表