当前位置: 首页 > news >正文

【时时三省】(C语言基础)将外部变量的作用域扩展到其他文件

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

C程序可以由一个或多个源程序文件组成。如果程序只由一个源文件组成,使用外部变量的方法前面已经介绍。如果程序由多个源程序文件组成,那么在一个文件中想引用另一个文件中已定义的外部变量,有什么办法呢?

如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num,否则在进行程序的连接时会出现“重复定义”的错误。正确的做法是:在任一个文件中定义外部变量Num,而在另一文件中用extern对Num作“外部变量声明”,即“extern Num;”。在编译和连接时,系统会由此知道Num有“外部链接”,可以从别处找到已定义的外部变量Num,并将在另一文件中定义的外部变量Num的作用域扩展到本文件,在本文件中可以合法地引用外部变量Num。

例题:

给定b的值,输入a和m,求a * b和aᵐ‌”的值。

解题思路:

分别编写两个文件模块,其中文件filel包含主函数,另一个文件file2包含求a”的函数。在filel文件中定义外部变量A,在file2中用extern声明外部变量A,把A的作用域扩展到file2文件。

编写程序:

文件file1.c代码:

文件file2.c代码:

运行结果:

从键盘输入a的值为2,m的值为3,程序输出:2 * 3 = 6,2**3= 8。由于计算机无法输出上角,故以“* *”代表幂次,这是借用FORTRAN语言表示乘方的方法。

程序分析:

file2.c文件的开头有一个extern声明,它声明在本文件中出现的变量A是一个“在其他文件中定义过的外部变量”。本来外部变量A的作用域是filel .c,但现在用extern声明将其作用域扩大到file2.c文件。

假如某一程序包括了5个源文件模块。在一个文件中定义外部整型变量A,其他4个文件都可以引用A,但必须在每一个文件中都加上一个“externA;”声明。在各文件经过编译后,将各目标文件连接成一个可执行的目标文件。

说明:用这种方法扩展全局变量的作用域应十分慎重,因为在执行一个文件中的操作时,可能会改变该全局变量的值,会影响到另一文件中全局变量的值,从而影响该文件中函数的执行结果。

extern既可以用来扩展外部变量在本文件中的作用域,又可以使外部变量的作用域从一个文件扩展到程序中的其他文件,那么系统怎么区别处理呢?

实际上,在编译时遇到extern时,先在本文件中找外部变量的定义,如果找到,就在本文件中扩展作用域;

如果找不到,就在连接时从其他文件中找外部变量的定义。如果从其他文件中找到了,就将作用域扩展到本文件;

如果再找不到,就按出错处理。

 

相关文章:

  • 深入理解常用依存关系标签
  • VAS1800Q高效恒流汽车LED驱动器电荷泵线性Chiplead
  • Unity json解析选择实测
  • ⚽ 实时赛事数据怎么接?WebSocket vs REST 接口详解!
  • 《TCP/IP协议卷1》第11章 UDP:用户数据报协议
  • 疏锦行Python打卡 DAY 27 函数专题2:装饰器
  • 常用scss技巧
  • 全局搜索正则表达式grep
  • 2.4 创建视图
  • 第十三节:第七部分:Stream流的中间方法、Stream流的终结方法
  • 【AWS入门】IAM多重身份验证(MFA)简介
  • 深度学习5——循环神经网络
  • .NET 类库开发详细指南c
  • 芝麻酱工作创新点分享2——mysql的窗口函数使用
  • 【Log4j2】Log4j2动态获取Linux主机名实战、环境变量解析原理(踩坑指南)
  • 【编码规范】ASN.1详解:从概念到C++实现解析
  • 量化面试绿皮书:11. 最后一个球
  • 单片机的中断功能-简要描述(外部中断为例)(8)
  • 聊一聊 Linux 上对函数进行 hook 的两种方式
  • 权限管理设计思路
  • 有做外国人的零售网站吗/网站统计分析工具
  • 天津网站制作福州/电子报刊的传播媒体是什么
  • 怎么自己在百度上做网站/优化排名
  • 做胎儿羊水鉴定网站/关键词排名提升工具
  • 商丘行业网站建设开发公司/网络渠道有哪些
  • 企业网站制作一/长沙有实力seo优化