cBuilder工程的基本结构.ppt

上传人:za****8 文档编号:3226263 上传时间:2019-12-09 格式:PPT 页数:35 大小:251.51KB
返回 下载 相关 举报
cBuilder工程的基本结构.ppt_第1页
第1页 / 共35页
cBuilder工程的基本结构.ppt_第2页
第2页 / 共35页
cBuilder工程的基本结构.ppt_第3页
第3页 / 共35页
点击查看更多>>
资源描述
1,C+Builder工程的基本结构,一、工程1.1工程概念工程是为了实现特定功能所需的文件集合。这个集合是一个特殊的文件夹,由工程文件进行描述和管理。,2,1.2工程的要素,窗体,单元,资源,选项,C+Builder工程的基本结构,3,C+Builder工程的基本结构,1.3项目的主要文件,工程描述文件(*.bpr),窗体文件(*.dfm),单元文件(*.cpp),资源文件(*.res),工程代码文件(*.cpp),4,主要文件简介,工程描述文件(.bpr)新建工程时由系统自动创建,单元文件(.cpp)一个窗体有一个单元。单元文件可以没有窗体,用以保存公共元素。,窗体文件(.dfm)用于记录窗体及窗体上控件的基本信息,资源文件(.res)保存图标、位图等信息,工程代码文件(*.cpp)新建工程时由系统自动创建,头文件(*.h),类定义文件,5,1.3.1工程描述文件工程描述文件的作用:用于描述宏定义,编译选项,连接选项,文件清单等。结构如下:.,C+Builder工程的基本结构,C+Builder工程的基本结构,.,6,7,1.3.2工程代码文件整个工程的总入口,用于初始化工程,创建窗体,启动工程。示例代码如下:#include#pragmahdrstopUSEFORM(Unit1.cpp,Form1);WINAPIWinMain(HINSTANCE,HINSTANCE,LPSTR,int),C+Builder工程的基本结构,C+Builder工程的基本结构,tryApplication-Initialize();Application-CreateForm(_classid(TForm1),8,C+Builder工程的基本结构,catch(.)trythrowException();catch(Exception,9,10,1.3.3单元文件(.cpp)为窗体类的实现文件,其中有窗体的构造方法,和窗体上各个控件的事件响应方法。代码如下:#include#pragmahdrstop#includeUnit1.h#includeStdio.h#includeiostream.h“#pragmapackage(smart_init)#pragmaresource*.dfmTForm1*Form1;,C+Builder工程的基本结构,C+Builder工程的基本结构,_fastcallTForm1:TForm1(TComponent*Owner):TForm(Owner)void_fastcallTForm1:Button1Click(TObject*Sender),11,12,1.3.4窗体文件(.dfm)窗体文件用于定义窗体,及窗体上组件的属性。1.查看窗体代码的操作在窗体上单击鼠标右键,在弹出菜单中选择ViewasText,即可看到窗体文件的内容。2.从窗体代码窗口返回窗体窗口的操作在窗体代码窗口上单击鼠标右键,在弹出菜单中选择ViewasForm。,C+Builder工程的基本结构,13,objectForm1:TForm1Left=234Top=124Width=696Height=480objectButton1:TButtonLeft=32Top=400OnClick=Button1Clickendend,C+Builder工程的基本结构,14,1.3.6头文件(*.h)头文件用来声明类。代码示例如下:#ifndefUnit1H#defineUnit1H#include#include#include#include#include,C+Builder工程的基本结构,classTForm1:publicTForm_published:/IDE-managedComponentsTButton*Button1;TLabel*Label1;TMainMenu*MainMenu1;private:/Userdeclarationspublic:/Userdeclarations_fastcallTForm1(TComponent*Owner);externPACKAGETForm1*Form1;#endif,15,二、工程需要保存的文件*.bpr*.cpp*.dfm*.res*.h小练习:新建一个项目,编译运行,关闭项目,然后到项目文件夹下,删除上述文件类型之外的文件,然后打开项目,看看能否从新编译运行。,16,C+Builder工程的基本结构,#pragma预处理指令详解,一、主要功能对每个编译器给出了一方法,在保持与C和C+语言完全兼容的情况下,给出主机或操作系统专有的特征。编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。二、命令格式#pragmapara其中:para为命令参数。,17,#pragma预处理指令详解,三、常见参数和意义3.1message在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#pragmamessage(消息文本)当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。如果在程序中定义了许多宏,用于控制源代码版本,则有可能会忘记有没有正确的设置这些宏,此时可以用这条指令在编译的时候就进行检查。,18,#pragma预处理指令详解,假设希望判断有没有在源代码的什么地方定义了_X86这个宏,可以用下面的方法:#ifdef_X86#pragmamessage(_X86macroactivated!)#endif定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示_86macroactivated!。就会知道有没有定义一些特定的宏了。,19,#pragma预处理指令详解,3.2code_seg格式:#pragmacode_seg(section-name,section-class)它能够设置程序中函数代码存放的代码段,当开发驱动程序的时候就会使用到它。,20,#pragma预处理指令详解,3.3once只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。,21,#pragma预处理指令详解,3.4hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。可以用#pragmastartup指定编译优先级,如果使用了#pragmapackage(smart_init),BCB就会根据优先级的大小先后编译。,22,#pragma预处理指令详解,3.5resource*.dfm表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。3.6warning(disable:450734;once:4385;error:164)不显示4507和34号警告信息,4385号警告信息仅报告一次,把164号警告信息作为一个错误。pragmawarning支持的其它下格式:,23,#pragma预处理指令详解,#pragmawarning(push)保存所有警告信息的现有的警告状态。#pragmawarning(push,n)保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n(1-4)。#pragmawarning(pop)从栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。,24,#pragma预处理指令详解,3.7comment(.)该指令将一个注释记录放入一个对象文件或可执行文件中。常用的lib关键字,可以帮我们连入一个库文件。如:#pragmacomment(lib,comctl32.lib)#pragmacomment(lib,vfw32.lib)#pragmacomment(lib,wsock32.lib),25,#pragma预处理指令详解,3.8#pragmaloop_opt(on|off)激活循环|终止循环优化功能。3.9#pragmawarn+100|-100启用或者禁止:“变量已定义但未使用的”警告信息。,26,#pragma预处理指令详解,27,#pragma预处理指令详解,内存对齐问题计算机系统对基本类型数据在内存中存放的位置有限制,要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是内存对齐,而这个k则被称为该数据类型的对齐模数(alignmentmodulus)。Win32平台下的微软C编译器(cl.exefor80 x86)在默认情况下采用如下的对齐规则:任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),就要求该类型数据的地址总是8的倍数。,28,#pragma预处理指令详解,Linux下的GCC的规则是:任何2字节大小的数据类的对齐模数是2,而其它所有超过2字节的数据类型都以4为对齐模数。ANSIC规定一种结构类型的大小是它所有字段的大小以及字段之间或字段尾部的填充区大小之和。填充区就是为了使结构体字段满足内存对齐要求而额外分配给结构体的空间。ANSIC标准规定结构体类型的对齐要求不能比它所有字段中要求最严格的那个宽松,可以更严格。,29,#pragma预处理指令详解,如何使用c/c+中的对齐选项vc6中的编译选项有/Zp1|2|4|8|16,/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。也就是:min(sizeof(member),n),30,#pragma预处理指令详解,3.10#pragmapack(n),(n:1,2,4,8,16)指定结构和联合成员的紧凑对齐。而一个完整的转换单元的结构和联合的紧凑对齐由/Zp选项设置。紧凑对齐用pack编译指示在数据说明层设置。该编译指示在其出现后的第一个结构或联合说明处生效。该编译指示对定义无效。第一个结构成员之后的每个结构成员都被存储在更小的成员类型或n字节界限内。如果你使用无参量的#pragmapack,结构成员被紧凑为以/Zp指定的值。该缺省/Zp紧凑值为/Zp8。,31,#pragma预处理指令详解,3.11#pragmapack(push|pop,identifier,n)若不同的组件使用pack编译指示指定不同的紧凑对齐,这个语法允许你把程序组件组合为一个单独的转换单元。带push参量的pack编译指示的每次出现将当前的紧凑对齐存储到一个内部编译器堆栈中。编译指示的参量表从左到右读取。如果你使用push,则当前紧凑值被存储起来;值是一样的。,32,#pragma预处理指令详解,如果你给出一个n的值,该值将成为新的紧凑值。若指定一个标识符,即你选定一个名称,则该标识符将和这个新的的紧凑值联系起来。带一个pop参量的pack编译指示的每次出现都会检索内部编译器堆栈顶的值,并且使该值为新的紧凑对齐值。如果使用pop参量且内部编译器堆栈是空的,则紧凑值为命令行给定的值,并且将产生一个警告信息。,33,#pragma预处理指令详解,若使用pop且指定一个n的值,该值将成为新的紧凑值。若你使用pop且指定一个标识符,所有存储在堆栈中的值将从栈中删除,直到找到一个匹配的标识符,这个与标识符相关的紧凑值也从栈中移出,并且这个仅在标识符入栈之前存在的紧凑值成为新的紧凑值。如果未找到匹配的标识符,将使用命令行设置的紧凑值,并且将产生一个一级警告。缺省紧凑对齐为8。pack编译指示的新的增强功能让你编写头文件,确保在遇到该头文件的前后的紧凑对齐。,34,#pragma预处理指令详解,3.12栈内存对齐在vc6中栈的对齐方式不受结构成员对齐选项的影响。它总是保持对齐,而且对齐在4字节边界上。四、编译器对#pragma指令的解释每个编译器对#pragma的实现不同,在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。,35,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!