第5讲 编译预处理.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 编译预处理 1.了解预编译的概念,掌握宏定义的方法。 2.了解“文件包含”与预处理的应用。 3.了解条件编译的几种形式。 ? 5.1 概述? 5.1 概述(P98) 编译预处理概念 编译预处理是指, 在进行编译之前, 先对源程序中的编译预处理命令进行处理; 然后再将处理的结果, 和源程序一起进行编译, 以得到目标代码 种类 宏定义 # define 文件包含 # include 条件编译 # if _ # else_ # endif 等 格式 “ # ” 开头 占单独书写行 语句尾不加分号 ? 5.2 宏定义? 5.2 宏定义(P98) 不带参数宏定义 一般形式: #define 宏名 [字符串] 功能:用指定标识符(宏名)代替字符序列(宏体) 定义位置:任意 (一般在函数外面) 作用域: 从定义命令到文件结束 # undef 可终止宏名作用域 格式: #undef 宏名 宏展开:预编译时, 用宏体替换宏名 -- 不作语法检查 引号中的内容与宏名相同也不置换 宏定义可嵌套,不能递归 宏定义中使用必要的括号 ( ) ? 5.2 宏定义? 【例 5.1】 给出下面宏替换的结果 # define R 5.0 # define FORMAT Area =% f\n # define PI 3.14159 # define AREA R*R*PI # define PR printf # include stdio.h main() { PR( FORMAT, AREA ); PR( FORMAT ); } ? 5.2 宏定义? 带参数宏定义 一般形式: # define 宏名(参数表) 宏体 宏展开:形参用实参换,其它字符保留 例: # define S( a, b ) a * b …… area = S( 3, 2 ); 宏展开: area = 3 * 2; 宏名与左圆括号之间不能留有空格 例: # define S?(r) PI*r*r 相当于定义了不带参宏 S, 代表字符串 “(r) PI*r*r” 宏体及各形参外一般应加括号 ( ) ? 5.2 宏定义? 【例 5.2】用带参数宏定义求两个数的最大值 # define MAX(x, y) (x)(y)?(x):(y) # include stdio.h main() { int a, b, c; float x, y, z; scanf(%d%d, a,b); c = MAX(a,b); scanf(%f%f, x,y); z = MAX(x, y); printf(c = %d z=%f \n, c, z); } ? 5.2 宏定义? 带参的宏与函数区别 ? 5.2 宏定义? 在定义和使用宏调用时应该注意的问题 ① 参数多次计算。 ② 运算符优先级引起的问题。 ③ 宏定义中的字符串相连。 在定义无参宏时,如果“语言符号字符串”是一个常量,则相应的“宏名”就是一个符号常量。 # define EOF -1 /* 文件尾 */ # define NULL 0 /* 空指针 */ 使用宏定义的优点 ① 可提高源程序的可维护性 ② 可提高源程序的可移植性 ③ 减少源程序中重复书写字符串的工作量 ? 5.3 文件包含? 5.3 文件包含(P101) 概念 用 #include 开始的预处理命令称文件包含命令。文件包含是指,一个源文件可以将另一个源文件的全部内容包含进来。 一般格式 # include “文件名” 或 # include 文件名 预处理过程 按规定方法寻找文件, 若找到, 用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译;若找不到, 则预编译出错,提示无法打开相应文件。 ? 5.3 文件包含? 文件包含的优点 一个大程序, 通常分为多个模块,并由多个人分别编程。有了文件包含处理功能,就可以将多个模块共用的数据(如符号常量和数据结构) 或函数,集中到一个单独的文件中。这样, 凡是要使用其中数据或调用其中函数的人,只要使用文件包含, 将所需文件

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档