C++如何定义全局变量

杰米粉2021-12-16 14:15

  在讨论全局变量之前,首先要了解几个基本概念:

  1、编译单元(模块):

  如今,随着IDE开发工具的普及,许多人不再清楚编译的一些概念,也就是说,许多程序员最害怕的是处理连接错误(LINKERROR),因为它不能像编译错误那样给你程序错误的具体位置,你经常对这个错误感到懊恼,但如果你经常使用gcc、makefile等工具在linux或嵌入式下进行开发工作,那么你可能会非常理解编译和连接的区别!在VC等开发工具上编写代码并点击编译按钮生成exe文件时,VC实际上做了两个步骤:第一步是将每个、cpp(、c)和相应的、h文件编译成obj文件;第二步是将工程中的所有obj文件LINK生成最终的、exe文件,那么错误可能会在两个地方产生,一个是编译时的错误,另一个是语法错误,另一个是连接错误,主要是重复定义变量等。我们所说的编译单元是指在编译阶段生成的每个objj文件,即一个单元,即一个。

C++如何定义全局变量

  2、声明与定义的区别。

  在声明函数或变量时,它没有给它实际的物理内存空间。有时它可以保证你的程序编译通过,但当函数或变量被定义时,它在内存中有一个实际的物理空间。如果您在编译模块中引用的外部变量没有在整个工程的任何地方定义,即使它可以在编译过程中通过,它也会在连接过程中报告错误,因为程序在内存中找不到这个变量!你也可以理解,同一变量或函数的声明可以多次,定义只能一次!

  3、extern的作用。

  extern有两个功能。首先,当它与“C”连接时,如extern“C”voidfun(inta,intb);它告诉编译器,在编译fun函数名时,按照C的规则翻译相应的函数名,而不是C++。C++的规则在翻译这个函数名时会使fun这个名字面目全非,可能是fun@abc_int_int#%$,也可能是其他的。这取决于编译器的“脾气”(不同的编译器使用不同的方法)。为什么这么做?因为C++支持函数的重载,这里不讨论太多这个问题。如果你感兴趣,

  当extern不与“C”一起修改变量或函数时,例如在第一个文件中:externintg_Int;它的功能是声明函数或全局变量范围的关键字。声明的函数和变量可以在本模块的其他模块中使用。请记住,这是一个声明,而不是定义!也就是说,如果B模块(编译单元)引用模块(编译单元)A中定义的全局变量或函数,它只需要包含A模块的第一个文件。在编译阶段,虽然模块B找不到函数或变量,但它不会报告错误。它将在连接过程中从模块A生成的目标代码中找到该函数。

  以上就是小编为大家整理发布的“C++如何定义全局变量”一文,更多相关内容尽在开课吧广场C++教程频道。

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用1
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
算法刷题核心能力提升营