CodeWarrior 使用教程(5)
6C 6C 6F 20 57 6F 72 6C 64 20 6F 6E 20 57 Hello World on W 00000010: 69 6E 64 6F 77 73 21 0A 00 indows! DEFINED SYMBOLS: name = _@8 offset = 0x00000000; type = 0x0000; class = 0x0003 ==============================================================
上述机器代码难于阅读,不要去管它。机器代码相比 C 或 C++ 而言,要难理解多了。但是,计算机只能理解机器语言。只有将你的程序编译—或翻译—成机器代码,然后再执行它,这样运行起来才能快一些,而不是每次运行时才去翻译它,那样运行速度就很慢了。
你只需选定一个源文件,然后从工程菜单中选择反汇编项,你就能看到该文件的机器语言清单。实际上上面我们看到的机器语言清单就是这样得到的。如果你仔细地对照阅读一下你的 C 或 C++ 源代码和它编译后的机器代码,不难发现它们之间的关系。
CodeWarrior 中编译选项的详细设置
在正式开始编译源代码之前,CodeWarrior 还要对其做预处理。在这个阶段,是对 C 或 C++ 代码进行编译前的一些准备工作。在编写程序的过程中,往往会有很多相同的P代码输入,于是程序员使用一些快捷方式,比如所谓的宏(macros)来代替这些相同的输入。例如,你可以使用 APPNAME 作为一个宏,来表示“Metrowerks CodeWarrior”,以此来减少输入的工作量。预处理就是要把这些宏转换为它们实际表示的代码,此外还要替换一些定义符号(比如 #define THREE 3)为实际的源代码。为了更好地理解预处理所做的工作,你可以查看一下预处理结果的清单。首先在工程窗口中选中一个源文件,然后从工程菜单中选择预处理项,你就可以看到源代码进行了预处理之后,编译之前的结果清单了。.
定制 CodeWarrior 的编译方式
在第二课中,我们已经了解了一些控制 CodeWarrior 编译代码的选项对话框。现在我们再来详细地看看一些标准 C 和 C++ 编译器的设置。请你按照下面所学内容在你的 CodeWarrior 上进行实际的操作练习。
图 3-1: 控制 CodeWarrior 进行 C/C++ 编译的语言设置
从编辑菜单中选择 Hello World X86 setting 项来打开设置窗口。现在,点击图3-1中语言设置类(Language Settings category)下面的 C/C++ 语言标签(C/C++ Language label),你就可以看到C/C++ 语言设置对话框中的许多选项。我们逐个来学习这些选项,以便了解它们是如何影响编译的过程的。
?
激活 C++ 编译器(Activate C++ Compiler): 这个选项允许你把所有后缀名为 .c 的源文件当作 C++ 文件来进行编译。如果你想在 C 源码中使用一些 C++ 语言的特色时,这个功能就很有用了; ?
ARM 一致性(ARM Conformance): 编译器要求你的代码遵循 ANSI C++ 的标准。但你可以通过选中这个选项来指定你的编译器遵循“注释 C++ 参考手册”(Annotated C++ Reference Manual,ARM) 中的标准; ?
允许 C++ 例外(Enable C++ Exceptions): 选中这个选项将允许你在 C++ 代码中使用 try/catch/throw 等块(blocks)。这些方法用于书写错误管理器(writing error handlers);
? 允许 RTTI(Enable RTTI): RTTI 表示 Run Time Type Information(运行类型信息)。这个选项运息编译器判定一个 C++ 对象在运行中的类型。这是 C++ 的高级特色,在很多情况下都是很有用的。如果你想了解更多关于 RTTI 的信息,请查阅你的 C++ 手册;
? 内联深度/自动内联/延期内联(Inline Depth/Auto-Inline/Deferred Inlining): 这些是关于源代码中使用的内联函数的一些设置项。所谓内联函数,就是在编译时该函数的源代码将被直接插入到程序体中,而不是产生这个函数的调用。在某些情况下,使用内联函数可以提高代码的性能。这是编译器的一个高级设置项;
? 字符串池(Pool Strings): 通常,编译器将编译后代码中的所有字符串对象存储到它们自己的数据空间中。如果你想将所有的这些字符串存放到一个数据空间中,就应该选中此项。如果你的源代码中有非常多的字符串(比如上面我们提到的 APPNAME 宏),那么你就应该选中此项来节省内存空间。这个功能只能在使用 PowerPC 的 Mac OS 平台上编程时使用;
? 不重用字符串(Don't Reuse Strings): 所谓“重用字符串”,就是指当你的程序中有几个完全一样的字符串时,编译器会将它们全都存放到同一个数据空间里。但是,有时你可能想修改某个字符串,这就会造成其它和要修改字符串共享数据空间的字符串也要被修改了。如果你想避免这种情况,就要选中这个选项。这样,即使程序中有完全一样的字符串,它们也将存放到不同的数据空间中;
? 要求有函数原型(Require Function Prototypes): 建议最好选中此项。使用函数原型可以帮助编译器在检查传递给函数的参数类型时发现代码中的错误。所谓函数原型就是在程序的前端对函数进行声明。也就是说,你应当在使用一个函数之前,定义或声明这个函数。既然这个选项这么好,那么什么时候应该关掉它呢?通常是,当你使用一些老版本的 C 进行编程时,并不需要对函数进行事先声明,这时你就应该关掉这个选项来检查整个程序代码。你一定愿意在程序前端书写函数原型,并选中此选项,因为它能帮助你解决这么多的编码错误;
? 允许支持布尔变量(Enable bool Support): 为了使用 C++ 的布尔变量—— true (真) 和 false (假) 这两个关键字,必须选中此项;
? 允许支持wchar_t(Enable wchar_t Support): 为了使用 C++ 的内置类型 wchar_t 而不是 char 类型来表示字符类型,必须选中此项;
? 严格遵循ANSI/只能使用 ANSI 关键字(ANSI Strict/ANSI Keywords Only): 默认情况下,编译器允许你使用 Metrowerks 扩展和 C/C++ 语言的附加关键字。但是如果你想在这种情况时编译报错,那么就应该选中这两项。这样,编译出来的程序就是 100% ANSI 兼容代码;
? 扩展通配符(Expand Trigraphs): 默认情况下,通配符是不允许的。为了能够使用通配符,就要选中此项。所谓通配符,就是在你的源代码中代表字符常量的方式。例如, '????' 就是一个通配符;
? 多字节敏感(Multi-Byte Aware): 如果你是有能够的编程语言要求使用多字节字符(例如 Kanji 或 Unicode),就要选中此项。这样编译器才能正确地处理源代码中的多字节字符;
? 指示到 SOM (Direct to SOM): 这是 Macintosh 平台上才有的功能,它允许你在 CodeWarrior 中直接创建 SOM 代码。SOM 是一种使用于苹果机上的开放文档环境的代码类型,但现在已没人用了;
? 使用 CR 为换行符(Map Newlines to CR): 这个选项允许你交换 '/n' 和 '/r' (这是用于标识源码行结束的符号)。此选项只对 Mac OS 上的编程有用;
? 不严格的指针类型规则(Relaxed Pointer Type Rules): 选中此项将把 char *, unsigned char *, void * 和 Ptr 当作是同一种类新。当你从另一个并没有正确管理指针类型的源代码中,或者是从一个使用还不能正确支持这些类型的老编译平台上开发的源代码中继承代码时,这个选项就很有用了;
? 枚举类型总是整型(Enums Always Ints): 通常情况下,编译器将一个枚举类型分配与之最接近的类型同样的空间。如果你想使枚举类型的空间总是和整型一样,那么就要选中此项。所谓枚举类型就像这样:enum {itemone, itemtwo = 7, itemthree}。其中,itemone 等于 0,itemtwo 等于 7,item …… 此处隐藏:3542字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




