关于c语言中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,”外部”的意思,可以引入外部函数,外部变量。也可以借此引用汇编程序。

C语言中,extern关键字怎么使用?最好解释清楚一点。

extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。

如果你定义A.cpp和B.cpp中都定义了全局变量i。那么分别编译,都可以通过,但是链接时就会报错。

B.obj : error LNK2005: “int i” (?i@@3HA) already defined in A.obj

反之,如果我们希望A.cpp和B.cpp中使用的i是同一个i。也就是两个文件,共同使用同一个全局变量。如果我们不在B.cpp中定义i。那么编译时就会报错,提示

error C2065: ‘i’ : undeclared identifier

如果我们定义i就会出现上面所说的错误。

于是,我们需要extern关键字。告诉编译器。这个i我们在别的模块中定义过了。你要编译的话,取别的模块找一找。这样程序就能够自动去A.cpp中寻找i的定义。并且让它在B.cpp中可以被使用。

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

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关键字的一些补充介绍。

简单总结:

原创文章,作者:CXEUC,如若转载,请注明出处:https://www.506064.com/n/325440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CXEUCCXEUC
上一篇 2025-01-13 13:24
下一篇 2025-01-13 13:24

相关推荐

  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Java 监控接口返回信息报错信息怎么处理

    本文将从多个方面对 Java 监控接口返回信息报错信息的处理方法进行详细的阐述,其中包括如何捕获异常、如何使用日志输出错误信息、以及如何通过异常处理机制解决报错问题等等。以下是详细…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28
  • Python作为中心语言,在编程中取代C语言的优势和挑战

    Python一直以其简单易懂的语法和高效的编码环境而著名。然而,它最近的发展趋势表明Python的使用范围已经从脚本语言扩展到了从Web应用到机器学习等广泛的开发领域。与此同时,C…

    编程 2025-04-28

发表回复

登录后才能评论