C语言培训教材课件第6章.ppt

上传人:xt****7 文档编号:16591425 上传时间:2020-10-17 格式:PPT 页数:20 大小:439.47KB
返回 下载 相关 举报
C语言培训教材课件第6章.ppt_第1页
第1页 / 共20页
C语言培训教材课件第6章.ppt_第2页
第2页 / 共20页
C语言培训教材课件第6章.ppt_第3页
第3页 / 共20页
点击查看更多>>
资源描述
烟台大学 计算机学院 刘 培 华 1 第 6章 编译预处理 2005年 3月 2 主要内容 编译预处理 多文件程序的调试方法 条件编译 2005年 3月 3 源文件 *.c 运行文件 *.exe 编译 编译 编译 目标文件 *.obj 连接 编译 连接 连接 编译预处理 编 译 编译预处理包括: 宏定义 文件包含 条件编译 6.1 编译预处理 2005年 3月 4 6.1 编译预处理(续) 源文件 *.c 运行文件 *.exe 目标文件 *.obj 编译 连接 main() float r,s,c; scanf(“%f”, s = r * r * 3.14; c = 2 * r * 3.14; printf(“s=%f, c=%f”,s,c); 如何修 改圆周率 2005年 3月 5 #define 宏名 字符串 宏定义的功能: 在进行编译前,用 字符串 原样替换程序中的 宏名 。 这个替换过程称为 “ 宏替换 ” 或 “ 宏展开 ” , 字符串 也称为替换文本。 命令的一般格式: 6.1.1 不带参数的宏定义 6.1 编译预处理(续) 2005年 3月 6 6.1 编译预处理(续) 例如: #define PI 3.14 main() float r,s,c; scanf(“%f”, s = r * r * PI; c = 2 * r * PI; printf(“s=%f, c=%f”,s,c); 替 换 3.14 3.14 编 译 2005年 3月 7 6.1 编译预处理(续) 为了增加程序的可读性,建议宏名用大写字母,其 他的标识符用小写字母。 双引号中有与宏名相同的字符串不进行替换。 已经定义的宏名可以被后定义的宏名引用。在预处 理时将层层进行替换。 说明 : 宏定义的作用域是从定义处开始到源文件结束, 但根据需要可用 undef命令终止其作用域。形式为 : #undef 宏名 2005年 3月 8 【 例 6.1】 不带参数的宏定义。 源程序: #define PI 3.14 #define S PI*r*r #define V 4*S*r/3 main( ) float r; printf(nInput r:); scanf(%f, printf(S=%.2f V=%.2fn,S,V); 编译预处理后的程序: main( ) float r; printf(nInput r:); scanf(%f, printf(S=%.2f V=%.2fn, 3.14*r*r, 4* 3.14*r*r *r/3); S V 进入编译 2005年 3月 9 命令的一般形式 6.1.2 带参数的宏定义 #define 宏名 (形参表 ) 字符串 功能 : 在编译预处理时,把源程序中所有 带参数的宏名 用宏定义中的 字符串 替换,并且用宏名后圆括号中 的 实参替换 字符串中的 形参 。 例如: #define MAX(X,Y) (X)(Y)?(X):(Y) 6.1 编译预处理(续) 2005年 3月 10 6.1 编译预处理(续) 【 例 6.30】 带参数的宏定义。 #define MAX(x,y) (x)(y)?(x):(y) main( ) printf(%dn,a,b, MAX(a,b); printf(%dn,MAX(a+m,b+n); 分两次替换: 将宏名 MAX(a,b) 替换成字符串 (x)(y)?(x):(y)。 用实参 a替换形参 x,实参 b替换形参 y。 程序中的两个 printf语句被展开为: printf(%dn, (a)(b)?(a):(b); printf(%dn, (a+m)(b+n)?( a+m):( b+n); 2005年 3月 11 6.1 编译预处理(续) 【 例 6.3】 分析下面程序运行后的输出结果。 #define MA(x) x*(x-1) main( ) int a=1,b=2; printf(%dn, MA(1+a+b); 分两次替换: MA(1+a+b) 用 x*(x-1) 替换。 用 1+a+b替换 x。 printf语句被展开为: printf(%dn, 1+a+b*(1+a+b-1); 特别注意: 由于替换文 本中的 x没 有用括号括 起,因此, 1+a+b也不 能用括号括 起。 程序输出结果: 8 2005年 3月 12 6.1 编译预处理(续) 命令的一般形式 格式 1: #include 格式 2: #include 文件名 6.1.3 文件包含 文件包含是将指定的某个源文件的内容全部包 含到当前文件中。用 include命令实现。 用 格式 1,预处理程序仅在 TCINCLUDE目录下 查找指定文件。 用 格式 2,预处理程序首先在 当前目录中 查找指定 文件,若找不到再到 TCINCLUDE目录中查找。 2005年 3月 13 6.1 编译预处理(续) 例如:调用 sin(x) 函数时,要在程序的开头使用 如下命令: #include 在预处理时,用 math.h文件内容替换 #include 命令行。 2功能 在预处理时,将 include命令后指定文件的内 容替换该命令行。 2005年 3月 14 6.2 多文件程序的调试方法 操作步骤如下: 在 TC 环境下建立一个工程文件( 扩展名为 prj), 设文件名为 test.prj,文件内容如下: file1.c file2.c fiile3.c 若这个文件不在当前盘或当前路径下,需要在文 件名前加盘符和路径。如果已经将源文件编译成目标 文件,可在工程文件中直接写目标文件名。 1. 使用工程文件将多个文件连接成一个可 执行文件的方法 例如:将 file1.c、 file2.c和 file3.c合并成一个可执行文件 。 2005年 3月 15 6.2 多文件程序的调试方法(续) 在 TC主菜单的“ Project”下拉菜单中选择 “ Project name”项,输入文件名 test.prj(文件 名前也可以加盘符和路径)。 在 TC环境下,按 Ctrl+F9,系统首先找到工程 文件 test.prj,然后将 file1.c、 file2.c和 file3.c分别 进行编译 ,若编译没通过,根据 出错信息 检查、 修改源程序,然后再按 Ctrl+F9重新编译。若编 译通过,系统自动生成三个对应的目标文件: file1.obj 、 file2.obj 和 fiile3.obj。接着系统自动 进行 连接 , 连接 成功则生成 test.exe并自动执行 该程序。 2005年 3月 16 6.2 多文件程序的调试方法(续) 2. 使用文件包含命令将多个文件连接成一个可 执行文件的方法 2005年 3月 17 6.2 多文件程序的调试方法(续) file3.c #include file2.c #include file3.c file1.c A file2.c B C B C A file1.c 预处理前 预处理后 2005年 3月 18 6.3 条件编译 实现条件编译的格式有如下三种 : 格式一: #ifdef 宏名 程序段 1 #else 程序段 2 #endif 条件编译: 是对源程序中的某段程序通过条件来控制是 否参加本次编译。 2005年 3月 19 6.3 条件编译(续) 格式二: #ifndef 宏名 程序段 1 #else 程序段 2 #endif 2005年 3月 20 6.3 条件编译(续) 格式三: #if 条件 程序段 1 #else 程序段 2 #endif
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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