上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 09 C程序组织

lecture9一c程序组织 绳伟光 上海交通大学微纳电子学系 2017年03月28日 SHA
lecture 9 —— C程序组织 绳伟光 上海交通大学微纳电子学系 2017年03月28日

内容 存储类别、链接、生存期、作用域 ■C文件结构 ■C程序的文件组织 ■文本排版程序示例 ■c程序的Build 2
存储类别、链接、生存期、作用域 C文件结构 C程序的文件组织 文本排版程序示例 C程序的Build 内容 2

存储类别、链接、生存期、作用域 存储类别:C中的存储类别规定了在内存中存 储数据的方式 作用域:作用域描述了程序中可通过名字访问 标识符的区域 链接:辅助作用域描述标识符的可见性,辅助 链接器进行链接过程 ■生存期:描述了标识符处于有效状态的时间区 间
存储类别:C中的存储类别规定了在内存中存 储数据的方式 作用域:作用域描述了程序中可通过名字访问 标识符的区域 链接:辅助作用域描述标识符的可见性,辅助 链接器进行链接过程 生存期:描述了标识符处于有效状态的时间区 间 存储类别、链接、生存期、作用域 3

作用域 ■c变量的作用域 必块作用域:只在某复合语句规定的块内可见 函数作用域:仅用于goto的标签,表示在某函数体内部有 效,不受块作用域限制 必函数原型作用域:仅在函数原型中可见 void foo(int m,int n,array[m][n]); 文件作用域:处于所有函数外面,从定义处直到当前C文件 结尾可见 ■注:C编译器每次只能编译一个C文件(翻译单元),因 此C编译器的视野范围只有一个C文件大小;链接器视 野范围为所有涉及的目标文件 ■作用域的概念需要从编译器的角度进行理解
C变量的作用域 块作用域:只在某复合语句规定的块内可见 函数作用域:仅用于goto的标签,表示在某函数体内部有 效,不受块作用域限制 函数原型作用域:仅在函数原型中可见 void foo(int m, int n, array[m][n]); 文件作用域:处于所有函数外面,从定义处直到当前C文件 结尾可见 注:C编译器每次只能编译一个C文件(翻译单元),因 此C编译器的视野范围只有一个C文件大小;链接器视 野范围为所有涉及的目标文件 作用域的概念需要从编译器的角度进行理解 作用域 4

关于块的进一步解释 块中声明的变量:当程序进入块中时,变量被 声明并获得空间,离开块时变量被销毁 ■ 块中声明的变量具有块作用域,不能从块外进 行访问 函数体本身就可以看作一个块 ■利用块声明变量的优点: C89规定函数内的变量只能在函数体头部声明,即 使仅仅是临时使用的变量,利用块侧可以打破限制 必减少命名冲突 ■( 99允许变量在块内任何地方声明
关于块的进一步解释 块中声明的变量:当程序进入块中时,变量被 声明并获得空间,离开块时变量被销毁 块中声明的变量具有块作用域,不能从块外进 行访问 函数体本身就可以看作一个块 利用块声明变量的优点: C89规定函数内的变量只能在函数体头部声明,即 使仅仅是临时使用的变量,利用块则可以打破限制 减少命名冲突 C99允许变量在块内任何地方声明 5

不同作用域的相互影响 ■在C程序中,可能相同的标识符表示不同的意思 为了防止语义上的混淆,C借助作用域来区分标识符的具 体含义 最重要的作用域规则:如果在块内声明了一个变量,而 在块外已经有与刚声明的变量同名的变量,则块内的变 量会隐藏(hides)块外的变量,从而不会发生冲突 当离开了块以后,相同的标识符恢复其本来的意义,代 表块外面的变量 6
不同作用域的相互影响 在C程序中,可能相同的标识符表示不同的意思 为了防止语义上的混淆,C借助作用域来区分标识符的具 体含义 最重要的作用域规则:如果在块内声明了一个变量,而 在块外已经有与刚声明的变量同名的变量,则块内的变 量会隐藏(hides)块外的变量,从而不会发生冲突 当离开了块以后,相同的标识符恢复其本来的意义,代 表块外面的变量 6

作用域与变量的隐藏 int(i) /Declaration 1 * Declaration1,i具有静态生 void i f(int①) /Declaration 2 * 存期和文件作用域 1=1; ■ Declaration1,i是函数形参 ,具有块作用域 void g(void) Declaration3,i是自动变量 int①-2; /Declaration 3 具有块作用域 if (i >0){ ■ Declaration4,i同样是一个 int (i); /Declaration 4 * 自动变量,具有更小的块 1=3; 作用域 1=4; C的作用域规则使得可以 区分的正确含义 void h(void) i= 5;
作用域与变量的隐藏 Declaration 1, i具有静态生 存期和文件作用域 Declaration 1, i是函数形参 ,具有块作用域 Declaration 3, i是自动变量 ,具有块作用域 Declaration 4, i同样是一个 自动变量,具有更小的块 作用域 C的作用域规则使得可以 区分i的正确含义 7

链接((linkage) C变量具有三种链接属性:外部链接、内部链接、无 链接 ~具有块作用域、函数作用域和函数原型作用域的变量都是 无链接的变量 ~外部链接或内部链接特指文件作用域的变量,内部链接变 量只能在一个翻译单元中使用 文件作用域变量默认具有外部链接,加static修饰后具有内 部链接 int aaa;// external linkage static int bbb;/internal linkage int main(){ 8
C变量具有三种链接属性:外部链接、内部链接、无 链接 具有块作用域、函数作用域和函数原型作用域的变量都是 无链接的变量 外部链接或内部链接特指文件作用域的变量,内部链接变 量只能在一个翻译单元中使用 文件作用域变量默认具有外部链接,加static修饰后具有内 部链接 链接(linkage) 8 int aaa;// external linkage static int bbb; // internal linkage int main() { ... }

生存期 ■C对象有四种生存期:自动存储生存期、静态生存期 、动态分配生存期、线程存储生存期 ?自动存储生存期:变量的生存期由编译器自动管理,一般 随着进入块分配内存,块结束时释放内存 ·静态生存期:在程序执行期间一直有效 动态分配生存期:指在堆中分配的变量,随着malloc生效, 生存期持续至调用free函数 线程存储生存期:本课程不涉及 注:对于文件作用域的变量,static关键字只是规定 是否具有内部链接,所有文件作用域变量都具有静态 生存期;对于块作用域变量,可以声明时加static关 键字表示具有静态生存期
C对象有四种生存期:自动存储生存期、静态生存期 、动态分配生存期、线程存储生存期 自动存储生存期:变量的生存期由编译器自动管理,一般 随着进入块分配内存,块结束时释放内存 静态生存期:在程序执行期间一直有效 动态分配生存期:指在堆中分配的变量,随着malloc生效, 生存期持续至调用free函数 线程存储生存期:本课程不涉及 注:对于文件作用域的变量,static关键字只是规定 是否具有内部链接,所有文件作用域变量都具有静态 生存期;对于块作用域变量,可以声明时加static关 键字表示具有静态生存期 生存期 9

存储类别 表:本课程涉及的存储类别 存储类别 生存 作用 链 声明方式 期 接 自动 自动 块 无 块内用auto修饰,默认省略 寄存器 自动 块 无 块内,使用register修饰 静态外部链接 静态 文件 外部 所有函数外 静态内部链接 静态 文件 内部 所有函数外,用static修饰 静态无链接 静态 块 无 块内,用static修饰 动态分配 动态 N/A N/A malloc() 动态分配变量放在后续课中,与内存管理一起讲解! 10
存储类别 生存 期 作用 域 链 接 声明方式 自动 自动 块 无 块内用auto修饰,默认省略 寄存器 自动 块 无 块内,使用register修饰 静态外部链接 静态 文件 外部 所有函数外 静态内部链接 静态 文件 内部 所有函数外,用static修饰 静态无链接 静态 块 无 块内,用static修饰 动态分配 动态 N/A N/A malloc() 存储类别 10 动态分配变量放在后续课中,与内存管理一起讲解! 表:本课程涉及的存储类别
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 08 指针.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 07 函数.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 06 C语言数组.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 05 C语言语句.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 03 C语言数据类型.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 02 C语言简介.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 15 输入输出.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 14 内存检测、剖面分析.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 13 高级指针.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 12 结构、联合与枚举.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 11 字符串.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 10 C程序调试.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 课程简介及编程基础(绳伟光).pdf
- 机械工业出版社:计算机科学丛书《计算机组成与设计:硬件、软件接口》电子教材(中文第4版).pdf
- 《计算机系统结构》课程教学资源(电子书籍)《Computer Systems》A Programmer's Perspective(Randal E. Bryant、David R. O'Hallaron,THIRD EDITION).pdf
- 《计算机系统结构》课程教学资源(电子书籍)《Computer Organization and Design》THE HARDWARE / SOFTWARE INTERFACE(DAVID A. PATTERSON JOHN L. HENNESSY,Fourth Edtion,彩色版).pdf
- 《中文信息学报》:中文组织机构名称与简称的识别.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲义)方波生成器项目报告书.doc
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第8讲 Windows应用程序设计.pdf
- 上海交通大学:《C++程序设计与实践》课程教学资源(讲稿)第7讲 C++类(2/2).pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 算法设计与分析基础.pdf
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 01 Greedy and Dynamic Programming.pptx
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 02 Divide and Conquer.pptx
- 上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 04 C语言运算符与表达式.pdf
- 《C程序与算法设计》课程教学资源(学习资料)快乐的Linux命令行.pdf
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)01 ROS系统安装.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)02 ROS基本元素实验(一).doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)03 ROS基本元素实验(二).doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)04 调试和可视化.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)05 外部设备的使用.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)06 机器视觉.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)07 机器人建模与仿真.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)08 机器人导航包.doc
- 上海交通大学:《ROS机器人操作系统基础与实战》课程教学资源(实验指导书)09 机械臂规划Moveit.doc
- 《并行与分布式程序设计》课程教学参考书:CUDA C PROGRAMMING(CUDA编程指南4.0中文版).pdf
- 《并行与分布式程序设计》课程教学参考书:NVIDIA《CUDA C PROGRAMMING GUIDE》(Design Guide,CHANGES FROM VERSION 9.0).pdf
- 《并行与分布式程序设计》课程教学参考书:NVIDIA《CUDA C Programming》(Professional).pdf
- 《并行与分布式程序设计》课程教学参考书:CUDA《Programming Massively Parallel Processors》A Hands-on Approach(美,David B. Kirk and Wen-mei W. Hwu,英文版).pdf
- 《并行与分布式程序设计》课程教学参考书:CUDA《Programming Massively Parellel Processors》大规模并行处理器编程实战(美)David B.Kirk&Wen-mei W.Hwu(中文版).pdf
- 《并行与分布式程序设计》课程教学参考书:分布式与云计算(美)Tom White《Hadoop权威指南》(中文第3版).pdf