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



《C编译预处理与多文件工程程序课件》由会员分享,可在线阅读,更多相关《C编译预处理与多文件工程程序课件(19页珍藏版)》请在装配图网上搜索。
1、*,计算机软件教学中心,http:/ 编译预处理,编译预处理,(,Preprocessor,),编译器根据源程序中的编译预处理指令对源程序文本进行相应操作的过程,编译预处理指令都以,“,#”,开头,它不是,C,语言语句,结尾不带“,;”,号,三种编译预处理指令,文件包含,(,Including files,),宏定义,(,Macro Definition,),条件编译,(,Conditional Compilation,),4,文件包含,头文件,(,Header File,),主要的作用是保存程序的声明,包括:功能函数原型、数据类型的声明等,如:,stdio.h,、,math.h,、,stri
2、ng.h,等。,文件包含指令的一般格式为:,#include,到编译系统指定的标准目录(,include,)下去查找该头文件,若没有找到就报错。多用于包含,标准头文件,。,#include,头文件名,“,首先到当前工作目录中查找头文件;若没找到,再到查找编译系统指定的标准目录中查找。多用于包含,用户自定义的头文件,。,5,宏定义,宏定义,将一个标识符定义为一个字符串。,在编译预处理时,源程序中的该标识符均以指定的,字符串来代替,。,宏定义也称为,宏替换,。,宏定义指令分为:,无参宏指令,带参宏指令,6,宏定义,无参宏指令,#define ,例,9.1,无参宏指令应用示例,7,#define P
3、I 3.14159,/*无参宏定义1,符号常量*/,#define ISPOSITIVE 0,/*无参宏定义2*/,#define FORMAT Area=%fn,/*无参宏定义3*/,#define ERRMSG Input error!n,/*无参宏定义4*/,思考题:若在本例宏定义命令的后面都加上“,;”,号,程序是否还能正确编译?,宏定义,带参宏指令,#define (),例,9.2,带参宏指令应用示例,8,#define SUB(a,b)a-b,/*带参宏定义*/,c=SUB(a,b);,/*替换为:c=a-b;*/,c=SUB(3,1+2);,/*,替换为:,c=3-1+2;,结果
4、不为,0,*/,思考题:如何修改本例宏定义使得,SUB(3,1+2),的结果为,0,?,宏定义,取消宏定义指令,#undef ,例如:,#undef PI,表示取消标识符,PI,的宏定义,9,条件编译,条件编译指令格式,1,:,#ifdef ,#else,#endif,例,9.3,条件编译指令应用示例,用于程序的调试信息的输出,10,条件编译,条件编译指令格式,2,:,#ifndef ,#else,#endif,可以用来防止头文件的重复包含,具体下面,9.2,节介绍,11,9.2,多文件工程程序,多文件工程程序,(,Project with Multiple,Source Files,),程序
5、代码按一定的分类原则被划分为若干个部分,也称为模块,(,Module,),优势:,使程序结构更加清晰,便于程序的分工协作开发,便于程序的维护,12,多文件工程程序的组织结构,将不同的功能和数据结构划分到不同的模块中,不同类型的程序放在不同的(,.c,)源文件中,将函数的定义和使用相分离,将函数的定义从程序其他代码中分离出来,单独存放,有利于函数的重用,将函数的声明和实现相分离,将函数的原型声明放在一个(,.h,)头文件中,将函数的具体实现放在另一个(,.c,)源文件中,13,多文件工程程序的组织结构,例,9.4,设计一个多文件工程程序,其功能是计算圆和矩形的面积和周长。,在,VC+,环境下分析
6、程序结构,并运行之。,14,注意:,main.c,中,#include“circle.h”,等使用了双引号,注意:,circle.h等中使用了条件编译指令,,防止,函数被重复声明,外部变量与外部函数,在一个程序文件中定义的变量或函数被其他程序文件所使用,外部变量,(,External Variable,),extern ;,外部函数,(,External Function,),extern ;,15,外部变量与外部函数,例,9.5,外部变量与外部函数示例,16,A.c,extern,void fb();,extern,void fc();,int x=0;,B.c,extern,int x;,
7、void fb(),C.c,extern,int x;,void fc(),思考题:若,B.c,文件中删除外部变量声明语句“,extern int x;”,程序是否还能正确编译?,静态全局变量与静态函数,限制所定义的变量或函数只能在本文件中使用,而其他文件不能访问。,静态全局变量,(,Static Global Variable,),static ;,静态函数,(,Static Function,),static ;,17,思考题:修改例,9.5,将,A.c,中变量,x,的定义改为,static int x=0;,将,B.c,中函数,fb(),定义前加上,static,重新编译程序,结果如何?,9.3 应用举例多文件结构处理数组问题,例,9.6,设计一个多文件工程程序,实现对一维数组的输入、输出、统计、查找等。,在,VC+,环境下分析程序结构,并运行之。,18,模块化程序设计思想,(,Modular Programming,),:,自顶向下、,逐步分解、,分而治之,19,输入理想的程序,输出快乐的人生,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。