DEVC工程、预处理和EGG图形.ppt
《DEVC工程、预处理和EGG图形.ppt》由会员分享,可在线阅读,更多相关《DEVC工程、预处理和EGG图形.ppt(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 工程、预处理和工程、预处理和EGG库库 提纲提纲1.使用工程组织多个源文件使用工程组织多个源文件2.预处理命令预处理命令3.Egg图形库说明图形库说明 2.模块化和工程模块化和工程模块的定义模块的定义一般把用一个名字就可调用的一段程序称为一般把用一个名字就可调用的一段程序称为“模块模块”,如子程序、函数等。,如子程序、函数等。模块的基本属性:模块的基本属性:n功能:描述该模块实现什么功能功能:描述该模块实现什么功能n逻辑:描述模块内部怎么做逻辑:描述模块内部怎么做n状态:该模块使用时的环境和条件状态:该模块使用时的环境和条件除了基本属性,还需描述模块的内部和外部特性除了基本属性,还需描述模块
2、的内部和外部特性n模块的外部特性:模块的模块名、参数表模块的外部特性:模块的模块名、参数表n模块的内部特性:完成其功能的程序代码和仅供该模块的内部特性:完成其功能的程序代码和仅供该模块内部使用的数据模块内部使用的数据n通常是先确定模块的外部特性,再确定其内部特性。通常是先确定模块的外部特性,再确定其内部特性。1.使用工程组织多个源文件使用工程组织多个源文件函数是最小的模块,若干个紧密相关的函数可函数是最小的模块,若干个紧密相关的函数可以组成更大的模块源文件。以组成更大的模块源文件。一条好的原则就是保持模块的紧凑性即在同一条好的原则就是保持模块的紧凑性即在同一个源文件中只包含那些在逻辑上与其相关
3、的一个源文件中只包含那些在逻辑上与其相关的函数。函数。1.使用工程组织多个源文件使用工程组织多个源文件模块化:把程序划分成独立命名且可独立访问的模块,模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,所有模块集成起来构成的每个模块完成一个子功能,所有模块集成起来构成的整体可完成用户的所有需求。整体可完成用户的所有需求。模块化意义模块化意义n降低了系统的复杂性,使系统容易修改和重用;降低了系统的复杂性,使系统容易修改和重用;n推动系统各部分的并行开发,提高开发效率。推动系统各部分的并行开发,提高开发效率。复杂问题复杂问题较小问题较小问题高层模块高层模块从整体上把握问题从整体
4、上把握问题,隐蔽细节隐蔽细节分解分解 1.使用工程组织多个源文件使用工程组织多个源文件使用工程来组织多个源文件。使用工程来组织多个源文件。将功能紧密相关的若干个函数组成单独的源文将功能紧密相关的若干个函数组成单独的源文件。件。对应于每一个提供通用功能的源文件,建立头对应于每一个提供通用功能的源文件,建立头文件。文件。#include“ListNode.h”自定义的头文件,自定义的头文件,该文件在工程所在目录下该文件在工程所在目录下#include“E:/temp/MyType.h“自定义的自定义的头文件,该文件不在工程所在目录下头文件,该文件不在工程所在目录下#include标准库函数头文件标
5、准库函数头文件 1.使用工程组织多个源文件使用工程组织多个源文件实例:猴子选大王实例:猴子选大王源文件的分割源文件的分割头文件的使用头文件的使用使用工程组织多个源文件使用工程组织多个源文件 在DEV-C+集成开发环境中:1.创建工程文件创建工程文件(.dev)文件/新建/工程,在弹出窗口中选择Console Application2、往项目中增加源文件、往项目中增加源文件(.c)工程/新建单元 新建一个源文件加到项目中或者 工程/添加 将已有的一个源文件加到项目中3、编译、链接、运行,查看结果、编译、链接、运行,查看结果 运行/编译 编译项目中所有源文件 或者运行/编译当前文件 编译当前源文件
6、或者运行/编译运行编译项目中所有源文件、链接、运行DEV-C+下工程的创建 一一.新建工程新建工程1.点击菜单:文件点击菜单:文件-新建新建-工程工程.DEV-C+下工程的创建 2.在弹出窗口的在弹出窗口的Basic页中选择页中选择ConsoleApplication,输入工程名称,选择是,输入工程名称,选择是c工程,点击确定。工程,点击确定。DEV-C+下工程的创建 3.此时弹出对话框,要求指定工程存放路径(如此时弹出对话框,要求指定工程存放路径(如G:temptestProject)。选择好路径后点击保存。)。选择好路径后点击保存。DEV-C+下工程的创建 4.此时系统自动加入此时系统自动
7、加入main.c文件如下。里面代码文件如下。里面代码是系统自动是系统自动生成的。生成的。DEV-C+下工程的创建 二.往工程中增加已创建的其他文件往工程中增加已创建的其他文件将将linkNode.h、link.c和和link.h三个文件拷贝到三个文件拷贝到工程所在目录工程所在目录G:temptestProject下下然后点击菜单然后点击菜单工程工程-添加添加DEV-C+下工程的创建 在弹出的对话框中选择要添加的源文件。然后点击打开。在弹出的对话框中选择要添加的源文件。然后点击打开。DEV-C+下工程的创建 此时在工程管理(此时在工程管理(Project)页中出现了加入这)页中出现了加入这3个文
8、件个文件DEV-C+下工程的创建 在工程管理页中鼠标左键点击在工程管理页中鼠标左键点击link.c,则右边的代码区出现该,则右边的代码区出现该文件的源代码。文件的源代码。DEV-C+下工程的创建 DEV-C+下工程的创建保存保存main.c在右边的代码区选择在右边的代码区选择main.c,然后然后Ctrl+S进行保进行保存,此时弹出对话框,询问保存的目录。存,此时弹出对话框,询问保存的目录。三三.编译文件编译文件若选择编译若选择编译(CtrlF9),则编译当前工程中的,则编译当前工程中的所有文件。若只是想单独编译一个文件,则选所有文件。若只是想单独编译一个文件,则选择择编译当前文件编译当前文件
9、(Shift+CtrlF9)。DEV-C+下工程的创建 DEV-C+下工程的创建编译成功后,在工程所在目录编译成功后,在工程所在目录G:temptestProject中包含文件如下中包含文件如下双击双击.exe即可运行程序。即可运行程序。也可使用也可使用Execute菜单下的菜单下的Run菜单运行程序。菜单运行程序。.dev是工程文件。双击该文件即可在是工程文件。双击该文件即可在DevC+环境中打环境中打开工程。开工程。四、在当前工程中新建一个文件四、在当前工程中新建一个文件如果要新建文件并将其添加到工程中,则选择如果要新建文件并将其添加到工程中,则选择菜单菜单工程工程-新建单元新建单元DEV
10、-C+下工程的创建 此时将加入一个文件(未命名此时将加入一个文件(未命名3)。选择保存时,指定该文件的)。选择保存时,指定该文件的名字和保存路径(一般和工程在同一路径下)。如下图所示名字和保存路径(一般和工程在同一路径下)。如下图所示DEV-C+下工程的创建 五五.从工程中移除一个文件。从工程中移除一个文件。如下图所示。注意:此时该文件在磁盘里还是如下图所示。注意:此时该文件在磁盘里还是存在,只是不包含在当前工程中了。存在,只是不包含在当前工程中了。DEV-C+下工程的创建 DEV-C+下工程的创建注意:添加一个已存在的文件到工程中时,该文件也可注意:添加一个已存在的文件到工程中时,该文件也可
11、以不位于工程所在路径下。假设工程位于以不位于工程所在路径下。假设工程位于D:tempproject目录下,要加入工程的目录下,要加入工程的linkNode.h、link.h和和link.c位于其他目录,则编译后工程所在目录位于其他目录,则编译后工程所在目录如下,并没有将上述三个文件复制到工程目录下(其如下,并没有将上述三个文件复制到工程目录下(其时在文件时在文件.dev中记录着上述中记录着上述3个文件的磁盘路径)个文件的磁盘路径)在VC6开发环境中:1.点击点击File-New弹出菜单(如下图)弹出菜单(如下图)VC6环境下工程的创建 2.选择选择Projects选项卡,选择选项卡,选择Win
12、32ConsoleApplication,在,在Projectname文本框输入工程名(如文本框输入工程名(如elevator),在),在Location文本框选择路径文本框选择路径如(如如(如C:test)(见下图)点击)(见下图)点击OKVC6环境下工程的创建 3.点击Finish(如下图)VC6环境下工程的创建 4.点击点击OK(如下图)(如下图)VC6环境下工程的创建 5.把所有源文件 例elevator.c、elevator.h文件拷贝到工程所在目录下(如C:TEST)。VC6环境下工程的创建 6.点击左下角的点击左下角的FileView(如下图红色圈所示),再鼠标右键点击(如下图红
13、色圈所示),再鼠标右键点击SourceFiles(如下图红色箭头所示),(如下图红色箭头所示),选择选择AddFilestoFolder,选择文件将,选择文件将elevator.c加入到加入到SourceFiles目目录,录,鼠标右键点击鼠标右键点击HeaderFiles,选择,选择AddFilestoFolder,选择文件将,选择文件将elevator.h加入到加入到HeaderFiles目录(结果如下图)目录(结果如下图)VC6环境下工程的创建 7.选择主菜单选择主菜单Project-Settings(工程(工程-设置)出对话框(如下图)设置)出对话框(如下图)VC6环境下工程的创建 VC
14、6环境下工程的创建8.点击左边树状导航栏点击左边树状导航栏elevator,点击右边选项卡,点击右边选项卡Link,找到找到Object/librarymodules:文本框,在最后添加两项文本框,在最后添加两项Msimg32.lib、egg.lib(如图)点击(如图)点击OK 9.这样就可以编写自己的主程序了,比如在这样就可以编写自己的主程序了,比如在SourceFile目录下建立目录下建立main.c文件,文件,main.c应包含应包含前面的前面的elevator.h(如下图如下图)VC6环境下工程的创建 提纲提纲1.使用工程组织多个源文件使用工程组织多个源文件2.预处理命令预处理命令3.
15、Egg图形库说明图形库说明 预处理指令预处理指令#include预处理指令预处理指令#define:符号常量符号常量预处理指令预处理指令#define:宏:宏条件编译条件编译提纲提纲 预处理指令预处理指令#define:宏:宏#define用来定义用来定义符号常量(用符号表示的常量)符号常量(用符号表示的常量)。宏(用符号定义的操作)。宏(用符号定义的操作)。宏宏宏用来替代一个字符串,类似于符号常量,宏用来替代一个字符串,类似于符号常量,宏在预处理时被替换字符串取代。宏在预处理时被替换字符串取代。不带参数的宏:预处理程序就像处理符号常不带参数的宏:预处理程序就像处理符号常量一样处理不带参数的宏
16、。量一样处理不带参数的宏。带参数的宏:先用替换文本取代参数,然后带参数的宏:先用替换文本取代参数,然后再把宏展开。再把宏展开。预处理指令预处理指令#define:宏:宏带参数的宏定义格式:带参数的宏定义格式:#define标识符标识符(形式参数表形式参数表)字符串字符串形式参数表由逗号分割开的标识符组成,这些形式参数表由逗号分割开的标识符组成,这些标识符在字符串中出现。标识符在字符串中出现。如:如:#definePI3.14159/常量定义常量定义#defineCIRCLE_AREA(x)(PI*(x)*(x)#defineMAX(x,y)(x)(y)?(x):(y)#defineNUL(x,
17、y)(x)*(y)预处理指令预处理指令#define:宏:宏宏调用格式:宏调用格式:标识符(实在参数表)标识符(实在参数表)如:如:area=CIRCLE_AREA(3+4);宏在预处理时被展开:宏在预处理时被展开:1.替换参数替换参数:文件中如果出现宏调用文件中如果出现宏调用CIRCLE_AREA(3+4),则字符串中的,则字符串中的x都用都用3+4替替代代;2.用字符串取代程序中的宏调用。用字符串取代程序中的宏调用。语句语句area=CIRCLE_AREA(3+4);在预处理;在预处理时将被展开成时将被展开成area=(3.14159*(3+4)*(3+4);(3.14159*(3+4)*
18、(3+4)预处理时被展开预处理时被展开 预处理指令预处理指令#define:宏:宏需要注意的是,需要注意的是,在宏名和括起参数的括号之间在宏名和括起参数的括号之间绝对不能有空格绝对不能有空格。此外,为了避免在翻译宏时。此外,为了避免在翻译宏时产生歧义,产生歧义,宏体和参数也应该用括号括起来宏体和参数也应该用括号括起来。例如,象下例中这样定义宏例如,象下例中这样定义宏CIRCLE_AREA是是不正确的:不正确的:defineCIRCLE_AREA(x)PI*x*x如:如:inta=3,b=4;语句语句area=CIRCLE_AREA(a+b);将被展开成将被展开成3.14159*a+b*a+b;
19、预处理指令预处理指令#define:宏:宏使用宏还是函数使用宏还是函数宏与函数相比有一个明显的优势,即它比函宏与函数相比有一个明显的优势,即它比函数效率更高数效率更高(并且更快并且更快),因为宏可以直接在,因为宏可以直接在源代码中展开,而调用函数还需要额外的开源代码中展开,而调用函数还需要额外的开销。销。但是,宏一般比较小,无法处理大的、复杂但是,宏一般比较小,无法处理大的、复杂的代码结构,而函数可以。的代码结构,而函数可以。此外,宏需要逐行展开,因此宏每出现一次,此外,宏需要逐行展开,因此宏每出现一次,宏的代码就要复制一次,这样你的程序就会宏的代码就要复制一次,这样你的程序就会变大,而使用函
20、数不会使程序变大。变大,而使用函数不会使程序变大。条件编译条件编译使编译器能够按照不同条件编译不同的程序使编译器能够按照不同条件编译不同的程序部分,产生不同的目标代码文件。部分,产生不同的目标代码文件。两种条件编译:使用常量表达式判断、使用两种条件编译:使用常量表达式判断、使用宏定义名判断宏定义名判断条件编译条件编译 条件编译条件编译1.使用常量表达式判断使用常量表达式判断(共共3种种)#if整型常量表达整型常量表达式式文本文本1#else其他文本其他文本#endif#if整型常量表达整型常量表达式式文本文本1#endif第第1种情况种情况第第2种情况种情况首先求常量表达式的值,然后根据常量表
21、达式值是否为首先求常量表达式的值,然后根据常量表达式值是否为0进行进行下面的条件编译。在第下面的条件编译。在第2种情况中,如果该表达式的值非种情况中,如果该表达式的值非0,则编译文本则编译文本1,否则编译其他文本。,否则编译其他文本。#if整型常量表达式整型常量表达式1文本文本1#elif整型常量表达式整型常量表达式2文本文本2#else其他文本其他文本#endif第第3种情况种情况 条件编译条件编译让编译器不编译某一段代码:让编译器不编译某一段代码:#if0不编译的代码不编译的代码#endif以后若想让编译器编译该段代码,只需要将以后若想让编译器编译该段代码,只需要将0改改成成1 条件编译条
22、件编译2.使用宏定义名判断使用宏定义名判断#ifdef标识符标识符文本文本1#else文本文本2#endif#ifndef标识符标识符文本文本1#endif如果定义了标识符为宏(即使宏体为空),则为真,如果定义了标识符为宏(即使宏体为空),则为真,编译编译#ifdef后面的文本;否则编译后面的文本;否则编译#else后面的文本后面的文本#ifdef标识符标识符文本文本1#endif 条件编译条件编译#ifdef标识符是标识符是#ifdefine(标识符)的缩写(标识符)的缩写#ifndef标识符是标识符是#if!define(标识符)的(标识符)的缩写缩写 条件编译条件编译调试阶段调试阶段,若
23、想打印变量的值,则代码如下:,若想打印变量的值,则代码如下:#defineDEBUG/定义宏,宏体为空定义宏,宏体为空#ifdefDEBUGprintf(“variablex=%dn”,x);printf(“variabley=%dn”,y);#endif完成调试后,可以去掉完成调试后,可以去掉#define指令,这样就会指令,这样就会在编译过程中忽略上述两条在编译过程中忽略上述两条printf语句。语句。条件编译条件编译#include#defineDEBUG/定义宏定义宏main()intage;charname20;printf(inputyouragen);scanf(%d,&age)
24、;printf(inputyournamen);scanf(%s,name);条件编译条件编译#ifdefDEBUGprintf(inputageis:%dn,age);#endif#undefDEBUG/取消宏定义取消宏定义#ifdefDEBUGprintf(inputnameis:%sn,name);#endifsystem(pause);return0;inputyourage30inputyournamejohninputageis:30请按任意键继续请按任意键继续.条件编译条件编译怎样避免多次包含同一个头文件怎样避免多次包含同一个头文件?在创建一个头文件时,你可以用在创建一个头文件时
25、,你可以用#define指令为指令为它定义一个唯一的标识符名称。你可以通过它定义一个唯一的标识符名称。你可以通过#ifndef指令检查这个标识符名称是否已被定指令检查这个标识符名称是否已被定义,如果已被定义,则说明该头文件已经被包义,如果已被定义,则说明该头文件已经被包含了,就不要再次包含该头文件;反之,则定含了,就不要再次包含该头文件;反之,则定义这个标识符名称,以避免以后再次包含该头义这个标识符名称,以避免以后再次包含该头文件。文件。猴子选大王猴子选大王NodeType.h:#ifndef_NODETYPE_H#define_NODETYPE_HstructlistNodeintdata;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DEVC 工程 预处理 EGG 图形
限制150内