extern在函数声明中的意思

extern在函数声明中的意思

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。以下是整理的extern在函数声明中的意思,希望对大家有所帮助。

它可以用作一种格式上的提示表明函数的定义可能在另一个源文件中, 但在extern int f();和int f();之间并没有实质的区别。

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

也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为 C++支持函数的重载啊,在这里不去过多的论述这个问题,如果你有兴趣可以去网上搜索,相信你可以得到满意的解释!

第二,当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。

问题:extern 变量

在一个源文件里定义了一个数组:char a[6];

在另外一个文件里用下列语句进行了声明:extern char *a;

请问,这样可以吗?

答案与分析:

1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。

2)、例子分析如下,如果a[] = "abcd",则外部变量a=0x61626364 (abcd的ASCII码值),*a显然没有意义

显然a指向的空间(0x61626364)没有意义,易出现非法内存访问。

3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。

4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

拓展资料

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

extern在c语言中是什么意思

1、举例来说,如果文件a.c需要引用b.c中变量intv,就可以在a.c中声明extern intv,然后就可以引用变量v。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern intv可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern intv,然后就可以引用到变量v了,只不过这样只能在函数fun作用域中引用v罢了,这还是变量作用域的问题。

2、如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字 extern 对该变量作外部变量声明,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

3、extern的另外用法是当C和C++混合编程时假如c++调用的是c源文档定义的函数或变量,那么要加extern来告诉编译器用c方式命名函数。可以通过把原函数名与参数信息结合,产生一个独特的内部名字,这种技术叫做名字修饰。名字修饰规则没有一个标准,所以不同的编译器的名字修饰规则也不一样。

转载请注明出处我优求知网 » extern在函数声明中的意思

学习

闭着眼睛画画作文(精选)

阅读(42)

无论在学习、工作或是生活中,大家都跟作文打过交道吧,作文根据体裁的不同可以分为记叙文、说明文、应用文、议论文。那么问题来了,到底应如何写一篇优秀的作文呢?以下是为大家整理的闭着眼睛画画作文,希望对大家有所帮助。

学习

纷至沓来的近义词是什么

阅读(41)

本文为您介绍纷至沓来的近义词是什么,内容包括纷至沓来近义词是什么意思,纷至沓来的近义词成语,纷至沓来和联翩而至是近义词吗。近义词,是指词汇意义相同或相近的词语,如“美好”和“美妙”、“懒惰”和“怠惰”、“枯萎”和“干枯”、“

学习

小学语文试卷分析(精选)

阅读(24)

本文为您介绍小学语文试卷分析(精选),内容包括小学语文试卷分析范文学生写的,小学语文试卷分析模板,小学语文试卷分析补救措施。定性分析是为了确定研究对象是否具有某种性质的分析,主要解决“有没有”,“是不是”的问题。以下是整理的小

学习

六年级语文下册试卷及答案

阅读(64)

本文为您介绍六年级语文下册试卷及答案,内容包括六年级语文下册试卷及答案免费,六年级语文下册试卷及答案2021,六年级下册语文期中测试卷。在平时的学习、工作中,我们都不可避免地要接触到试卷,成绩的提高,最关键的是什么的呢,重要的是多做

学习

精益团队口号

阅读(34)

本文为您介绍精益团队口号,内容包括精益团队口号标语,精益团队队名和口号,精益主题口号大全。在日常学习、工作或生活中,大家对标语都再熟悉不过了吧,标语在生活中是比较重要的一种宣传形式。标语的类型有很多,你都知道吗?下面是帮大家整理

学习

柳永蝶恋花的阅读答案

阅读(68)

本文为您介绍柳永蝶恋花的阅读答案,内容包括柳永蝶恋花原文及赏析,蝶恋花柳永讲的是什么,蝶恋花柳永阅读答案。无论是在学校还是在社会中,我们最熟悉的就是阅读答案了,阅读答案有助于我们领会解题思路,掌握答题技巧。一份什么样的阅读答案

学习

生物试卷分析

阅读(46)

本文为您介绍生物试卷分析,内容包括生物试卷分析范文300字,生物试卷分析模板,生物试卷分析失分原因和改进措施。在日常学习、工作生活中,我们最不陌生的就是试卷了,试卷是课程考核统计分析工作的重要组成部分,它包括试卷的信度、效度、区分

学习

数学函数知识点

阅读(68)

本文为您介绍数学函数知识点,内容包括数学函数知识点整理,数学函数知识点初中,数学函数知识点归纳高中。漫长的学习生涯中,大家都背过不少知识点,肯定对知识点非常熟悉吧!知识点是指某个模块知识的重点、核心内容、关键部分。掌握知识点有

学习

人教版《背影》教学设计(精选)

阅读(39)

本文为您介绍人教版《背影》教学设计(精选),内容包括背影教学设计一等奖余映潮,背影人教版课文电子版,背影教案人教版。作为一无名无私奉献的教育工作者,时常需要用到教学设计,借助教学设计可以促进我们快速成长,使教学工作更加科学化。我们

学习

歌颂国庆节的诗歌朗诵稿(精选)

阅读(25)

本文为您介绍歌颂国庆节的诗歌朗诵稿(精选),内容包括国庆节个人诗歌朗诵稿,国庆节诗歌朗诵表演,幼儿国庆节诗歌朗诵稿。国庆节举办诗歌朗诵会可以营造喜庆欢乐、祥和热烈的节日氛围,同时能展现中华儿女热爱伟大祖国、讴歌伟大时代、奉献伟

学习

开学伊始作文(通用)

阅读(31)

本文为您介绍开学伊始作文(通用),内容包括开学最难忘的一件事作文,开学感想高一作文800字,开学的计划作文400字。从小学到初中,这是一个全新的开始,新的学期、新的学校、新的老师、新的同学,虽然才开学一个月,但却让我改变了许多。下面是开学

学习

《永久的生命》说课稿范文(精选)

阅读(64)

本文为您介绍《永久的生命》说课稿范文(精选),内容包括永久的生命说课,小学生命安全教育课评课稿,生命教育说课稿。作为一名教师,往往需要进行说课稿编写工作,说课稿有助于提高教师的语言表达能力。说课稿要怎么写呢?以下是为大家收集的《永

学习

个人房屋转租合同(精选)

阅读(21)

本文为您介绍个人房屋转租合同(精选),内容包括房屋转租有纠纷怎么解决,租别人转租的房子怎样写合同,店铺转租合同范本。房屋转租指的是承租人在经过出租人的允许之后,将闲置的暂时不居住的房屋转租给第三人,这个时候一般需要第三方给予承租

学习

关于邂逅霍金的阅读答案

阅读(58)

本文为您介绍关于邂逅霍金的阅读答案,内容包括邂逅霍金的阅读答案,邂逅的霍金的阅读理解,邂逅霍金的写作目的。在平平淡淡的日常中,许多人都需要跟阅读答案打交道,阅读答案可以给我们提供解题指导和解题思路。什么样的阅读答案才是好阅读

学习

最新不侵权声明

阅读(29)

本文为您介绍最新不侵权声明,内容包括不侵权声明失败了怎么办,不侵权声明初步审核通过,不声明原创就不侵权吗。声明是指公开表态或说明,庄严声明,另指声明的文告,发表声明。《左传·桓公二年》等史书均有记载。以下是收集整理的最新不侵权

学习

《二次函数与一元二次方程》教学反思

阅读(34)

本文为您介绍《二次函数与一元二次方程》教学反思,内容包括二次函数与实际问题教学反思,二元一次方程与一次函数教学反思。《二次函数与一元二次方程》教学反思身为一名优秀的人民教师,我们要有一流的课堂教学能力,对教学中的新发现可以写

学习

一次函数与二元一次方程组教学反思(通用)

阅读(39)

本文为您介绍一次函数与二元一次方程组教学反思(通用),内容包括代入消元法解二元一次方程反思,代入法解二元一次方程组教学反思,一次函数与二元一次方程教案详案。随着社会不断地进步,教学是重要的任务之一,反思指回头、反过来思考的意思。

学习

函数的最值教案设计

阅读(46)

本文为您介绍函数的最值教案设计,内容包括数学函数的最值优秀教案,对勾函数求最值方法,二次函数的最值问题。作为一名优秀的教育工作者,时常要开展教案准备工作,编写教案有利于我们弄通教材内容,进而选择科学、恰当的教学方法。教案应该怎

学习

投标声明范文

阅读(51)

投标是一个投标招标的专业术语,是指投标人应招标人的邀请,根据招标公告或投标邀请书所规定的条件,在规定的期限内,向招标人递盘的行为。以下是为大家收集的投标声明范文,欢迎阅读,希望大家能够喜欢。

学习

未婚声明范本(通用)

阅读(62)

在平平淡淡的日常中,大家都写过证明,肯定对各类证明都很熟悉吧,当我们要想证明某个事实是真的`时,最好的办法就是出具证明。拟起证明来就毫无头绪?下面是整理的未婚声明,欢迎阅读,希望大家能够喜欢。

学习

函数的概念教学反思

阅读(58)

本文为您介绍函数的概念教学反思,内容包括对数函数的概念教学反思,一次函数概念教学反思。函数的概念教学反思(汇编12篇)作为一名到岗不久的人民教师,课堂教学是重要的任务之一,借助教学反思我们可以拓展自己的教学方式,那么写教学反思需要

学习

《正比例函数》教学反思

阅读(33)

本文为您介绍《正比例函数》教学反思,内容包括正比例函数教学反思不足之处,正比例函数的像及性质教学反思。《正比例函数》教学反思身为一名优秀的人民教师,我们要有很强的课堂教学能力,通过教学反思能很快的发现自己的讲课缺点,我们该怎么