C编译预处理与多文件工程程序课件

上传人:cn****1 文档编号:569275214 上传时间:2024-07-28 格式:PPT 页数:19 大小:587KB
返回 下载 相关 举报
C编译预处理与多文件工程程序课件_第1页
第1页 / 共19页
C编译预处理与多文件工程程序课件_第2页
第2页 / 共19页
C编译预处理与多文件工程程序课件_第3页
第3页 / 共19页
C编译预处理与多文件工程程序课件_第4页
第4页 / 共19页
C编译预处理与多文件工程程序课件_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C编译预处理与多文件工程程序课件》由会员分享,可在线阅读,更多相关《C编译预处理与多文件工程程序课件(19页珍藏版)》请在金锄头文库上搜索。

1、2012014 4. .07.2107.21高级语言程序设计高级语言程序设计高级语言程序设计高级语言程序设计南京邮电大学计算机学院南京邮电大学计算机学院计算机软件教学中心计算机软件教学中心2012014 4. .07.2107.21高级语言程序设计高级语言程序设计高级语言程序设计高级语言程序设计第第09章章 编译预处理与多文件工程程序编译预处理与多文件工程程序内容提要内容提要l编译预处理的概念编译预处理的概念l多文件工程程序的组织方式多文件工程程序的组织方式 l模块化程序设计的基本方法模块化程序设计的基本方法3 39.1 编译预处理编译预处理l编译预处理编译预处理(Preprocessor)编

2、译器根据源程序中的编译预处理指令对源程序编译器根据源程序中的编译预处理指令对源程序文本进行相应操作的过程文本进行相应操作的过程编译预处理指令都以编译预处理指令都以“#”开头开头l它不是它不是C语言语句,结尾不带语言语句,结尾不带“;”号号l三种编译预处理指令三种编译预处理指令文件包含文件包含(Including files)宏定义宏定义(Macro Definition)条件编译条件编译(Conditional Compilation)4 4文件包含文件包含l头文件头文件(Header File)主要的作用是保存程序的声明,包括:功能函数原型、数主要的作用是保存程序的声明,包括:功能函数原型、

3、数据类型的声明等,如:据类型的声明等,如:stdio.h、math.h、string.h等。等。l文件包含指令的一般格式为:文件包含指令的一般格式为:#include l到编译系统指定的标准目录(到编译系统指定的标准目录(include)下去查找该)下去查找该头文件,若没有找到就报错。多用于包含头文件,若没有找到就报错。多用于包含标准头文件标准头文件。#include 头文件名头文件名“l首先到当前工作目录中查找头文件;若没找到,再到查首先到当前工作目录中查找头文件;若没找到,再到查找编译系统指定的标准目录中查找。多用于包含找编译系统指定的标准目录中查找。多用于包含用户自用户自定义的头文件定义

4、的头文件。5 5宏定义宏定义l宏定义宏定义将一个标识符定义为一个字符串。将一个标识符定义为一个字符串。在编译预处理时,源程序中的该标识符均以指定在编译预处理时,源程序中的该标识符均以指定的的字符串来代替字符串来代替。l宏定义也称为宏定义也称为宏替换宏替换。l宏定义指令分为:宏定义指令分为:无参宏指令无参宏指令带参宏指令带参宏指令6 6宏定义宏定义l无参宏指令无参宏指令#define l例例9.1无参宏指令应用示例无参宏指令应用示例7 7#define PI 3.14159 /*无参宏定义无参宏定义1,符号常量,符号常量*/#define ISPOSITIVE 0 /*无参宏定义无参宏定义2*/

5、#define FORMAT Area=%fn /*无参宏定义无参宏定义3*/#define ERRMSG Input error!n /*无参宏定义无参宏定义4*/思考题:若在本例宏定义命令的后思考题:若在本例宏定义命令的后面都加上面都加上“;”;”号,程序是否还能号,程序是否还能正确编译?正确编译?宏定义宏定义l带参宏指令带参宏指令#define ( ) l例例9.2带参宏指令应用示例带参宏指令应用示例8 8#define SUB(a,b) a-b /*带参宏定义带参宏定义*/c=SUB(a,b); /*替换为:替换为:c=a-b; */c=SUB(3,1+2); /*替换为:替换为:c=

6、3-1+2; 结果不为结果不为0*/思考题:如何修改本例宏定义使得思考题:如何修改本例宏定义使得SUB(3,1+2)SUB(3,1+2)的结果为的结果为0 0?宏定义宏定义l取消宏定义指令取消宏定义指令#undef l例如:例如:#undef PI 表示取消标识符表示取消标识符PI的宏定义的宏定义9 9条件编译条件编译l条件编译指令格式条件编译指令格式1:#ifdef #else #endif l例例9.3条件编译指令应用示例条件编译指令应用示例用于程序的调试信息的输出用于程序的调试信息的输出1010条件编译条件编译l条件编译指令格式条件编译指令格式2:#ifndef #else #endif

7、 l可以用来防止头文件的重复包含可以用来防止头文件的重复包含具体下面具体下面9.2节介绍节介绍11119.2 多文件工程程序多文件工程程序l多文件工程程序多文件工程程序(Project with Multiple Source Files)程序代码按一定的分类原则被划分为若干个部分,程序代码按一定的分类原则被划分为若干个部分,也称为模块也称为模块(Module)l优势:优势:使程序结构更加清晰使程序结构更加清晰便于程序的分工协作开发便于程序的分工协作开发便于程序的维护便于程序的维护1212多文件工程程序的组织结构多文件工程程序的组织结构l将不同的功能和数据结构划分到不同的模块中将不同的功能和数

8、据结构划分到不同的模块中不同类型的程序放在不同的(不同类型的程序放在不同的(.c)源文件中)源文件中l将函数的定义和使用相分离将函数的定义和使用相分离将函数的定义从程序其他代码中分离出来,单独将函数的定义从程序其他代码中分离出来,单独存放,有利于函数的重用存放,有利于函数的重用l将函数的声明和实现相分离将函数的声明和实现相分离将函数的原型声明放在一个(将函数的原型声明放在一个(.h)头文件中)头文件中将函数的具体实现放在另一个(将函数的具体实现放在另一个(.c)源文件中)源文件中1313多文件工程程序的组织结构多文件工程程序的组织结构l例例9.4 设计一个多文件工程程序,其功能是计设计一个多文

9、件工程程序,其功能是计算圆和矩形的面积和周长。算圆和矩形的面积和周长。l在在VC+环境下分析程序结构,并运行之。环境下分析程序结构,并运行之。1414注意:注意:main.c中中#include “circle.h”等使用了双引号等使用了双引号注意:注意:circle.h等等中使用了条件编中使用了条件编译指令,译指令,防止防止函函数被重复声明数被重复声明外部变量与外部函数外部变量与外部函数l在一个程序文件中定义的变量或函数被其他程在一个程序文件中定义的变量或函数被其他程序文件所使用序文件所使用l外部变量外部变量(External Variable)extern ;l外部函数外部函数(Exter

10、nal Function)extern ;1515外部变量与外部函数外部变量与外部函数l例例9.5 外部变量与外部函数示例外部变量与外部函数示例1616A.cextern void fb();extern void fc(); int x=0; B.cextern int x; void fb() C.cextern int x; void fc() 思考题:若思考题:若B.cB.c文件中删除外部变量声文件中删除外部变量声明语句明语句“extern int x;”extern int x;”程序是否还程序是否还能正确编译?能正确编译?静态全局变量与静态函数静态全局变量与静态函数l限制所定义的变

11、量或函数只能在本文件中使用,限制所定义的变量或函数只能在本文件中使用,而其他文件不能访问。而其他文件不能访问。l静态全局变量静态全局变量(Static Global Variable)static ;l静态函数静态函数(Static Function)static ;1717思考题:修改例思考题:修改例9.59.5将将A.cA.c中变量中变量x x的定义改为的定义改为static int x=0;static int x=0;将将B.cB.c中函数中函数fb()fb()定义前加上定义前加上static,static,重新编译程序,结果如何?重新编译程序,结果如何?9.3 应用举例应用举例多文件结构处理数组问题多文件结构处理数组问题l例例9.6设计一个多文件工程程序,实现对一维设计一个多文件工程程序,实现对一维数组的输入、输出、统计、查找等。数组的输入、输出、统计、查找等。l在在VC+环境下分析程序结构,并运行之。环境下分析程序结构,并运行之。1818模块化程序设计思想模块化程序设计思想(Modular Programming):自顶向下、自顶向下、逐步分解、逐步分解、分而治之分而治之19输入理想的程序输入理想的程序输出快乐的人生输出快乐的人生

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号