C编译预处理与多文件工程程序PPT文件格式下载.ppt
《C编译预处理与多文件工程程序PPT文件格式下载.ppt》由会员分享,可在线阅读,更多相关《C编译预处理与多文件工程程序PPT文件格式下载.ppt(19页珍藏版)》请在冰豆网上搜索。
#include到编译系统指定的标准目录(include)下去查找该头文件,若没有找到就报错。
多用于包含标准头文件。
#include头文件名“首先到当前工作目录中查找头文件;
若没找到,再到查找编译系统指定的标准目录中查找。
多用于包含用户自定义的头文件。
5,宏定义,宏定义将一个标识符定义为一个字符串。
在编译预处理时,源程序中的该标识符均以指定的字符串来代替。
宏定义也称为宏替换。
宏定义指令分为:
无参宏指令带参宏指令,6,宏定义,无参宏指令#define例9.1无参宏指令应用示例,7,#definePI3.14159/*无参宏定义1,符号常量*/#defineISPOSITIVE0/*无参宏定义2*/#defineFORMATArea=%fn/*无参宏定义3*/#defineERRMSGInputerror!
n/*无参宏定义4*/,思考题:
若在本例宏定义命令的后面都加上“;
”号,程序是否还能正确编译?
宏定义,带参宏指令#define()例9.2带参宏指令应用示例,8,#defineSUB(a,b)a-b/*带参宏定义*/c=SUB(a,b);
/*替换为:
c=a-b;
*/c=SUB(3,1+2);
c=3-1+2;
结果不为0*/,思考题:
如何修改本例宏定义使得SUB(3,1+2)的结果为0?
宏定义,取消宏定义指令#undef例如:
#undefPI表示取消标识符PI的宏定义,9,条件编译,条件编译指令格式1:
#ifdef#else#endif例9.3条件编译指令应用示例用于程序的调试信息的输出,10,条件编译,条件编译指令格式2:
#ifndef#else#endif可以用来防止头文件的重复包含具体下面9.2节介绍,11,9.2多文件工程程序,多文件工程程序(ProjectwithMultipleSourceFiles)程序代码按一定的分类原则被划分为若干个部分,也称为模块(Module)优势:
使程序结构更加清晰便于程序的分工协作开发便于程序的维护,12,多文件工程程序的组织结构,将不同的功能和数据结构划分到不同的模块中不同类型的程序放在不同的(.c)源文件中将函数的定义和使用相分离将函数的定义从程序其他代码中分离出来,单独存放,有利于函数的重用将函数的声明和实现相分离将函数的原型声明放在一个(.h)头文件中将函数的具体实现放在另一个(.c)源文件中,13,多文件工程程序的组织结构,例9.4设计一个多文件工程程序,其功能是计算圆和矩形的面积和周长。
在VC+环境下分析程序结构,并运行之。
14,注意:
main.c中#include“circle.h”等使用了双引号,注意:
circle.h等中使用了条件编译指令,防止函数被重复声明,外部变量与外部函数,在一个程序文件中定义的变量或函数被其他程序文件所使用外部变量(ExternalVariable)extern;
外部函数(ExternalFunction)extern;
15,外部变量与外部函数,例9.5外部变量与外部函数示例,16,A.cexternvoidfb();
externvoidfc();
intx=0;
B.cexternintx;
voidfb(),C.cexternintx;
voidfc(),思考题:
若B.c文件中删除外部变量声明语句“externintx;
”程序是否还能正确编译?
静态全局变量与静态函数,限制所定义的变量或函数只能在本文件中使用,而其他文件不能访问。
静态全局变量(StaticGlobalVariable)static;
静态函数(StaticFunction)static;
17,思考题:
修改例9.5将A.c中变量x的定义改为staticintx=0;
将B.c中函数fb()定义前加上static,重新编译程序,结果如何?
9.3应用举例多文件结构处理数组问题,例9.6设计一个多文件工程程序,实现对一维数组的输入、输出、统计、查找等。
18,模块化程序设计思想(ModularProgramming):
自顶向下、逐步分解、分而治之,19,