网站大量收购独家精品文档,联系QQ:2885784924

《C语言程序设计》课件PPT07 编译预处理.ppt

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《C语言程序设计》课件PPT07 编译预处理

第*页 刘勇 liuyong@ustc.edu.cn 中国科学技术大学 C语言程序设计讲义 2011 7、编 译 预 处 理 目 录 预处理 宏定义 文件包含 条件编译 预处理 (Preprocessor) 预处理 在编译之前对源程序进行“预处理” 预处理命令不是C语句,末尾没有分号 预处理命令不在可执行文件中执行 预处理命令都以#开始 包括宏定义、文件包含、条件编译等 举例 #define MAX 1000 #include stdio.h 宏(Macro)定义 无参数的宏定义 带参数的宏定义 无参数的宏定义 一般形式 #define 标识符 字符串 说明 把源程序中相应标识符予以替换 仅是简单的字符串替换,没有任何语法正确性检查 有效范围从定义处开始,到文件结束,或者由#undef命令终止作用域 行末没有分号,如有分号将会被一起替换 无参宏定义举例 #define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define begin { #define end } #define forever for(;;) void main() begin /* { */ printf(L=%f, L); #undef PI /* 取消对PI的宏定义 */ forever; /* for(;;); 无限循环 */ end /* } */ 带参数的宏定义 一般形式 #define 宏名(参数表) 字符串 说明 宏定义仅是把参数作为字符串做简单替换,而不做任何运算求值和语法检查 宏名与参数表的括号之间不应有空格 应注意参数替换后可能出现的语法错误和意料之外的运算 应在宏定义内容及其中参数两边加上括号 带参宏定义举例 #define S1(a,b) a*b //注意,这种形式可能会带来问题 #define S2(a,b) ((a)*(b)) #define max(a,b) ((a)(b)?(a):(b)) void main() { int x=3, y=4, i=5, j=6, s, z; s=S1(x+y, x-y); /* s=x+y*x-y; s==11 */ s=S2(x+y, x-y); /* s=((x+y)*(x-y)); s==-7 */ z=max(i++, j++); /* z=((i++)(j++)?(i++):(j++)); */ /* z==7, i==6, j==8 */ } 文件包含 一般形式 #include filename #include filename 说明 把另一个源文件的全部内容包含进来 预编译后,它们已成为一个文件 头文件的扩展名一般用.h,但并非规定 调用库函数一般使用,也可以使用 调用用户编写的头文件应使用 条件编译 条件编译 对某些部分的源程序指定编译的条件 可以减少被编译的语句,减少目标程序的长度,减少运行时间 有利于移植程序,增加程序的灵活性 命令形式 #ifdef...#else...#endif #ifndef...#else...#endif #if...#else...#endif 条件编译的三种形式 第一种形式: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为: #ifdef 标识符 程序段 #endif 条件编译的三种形式 第二种形式: #ifndef 标识符 程序段1 #else 程序段2 #endif 与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。 条件编译的三种形式 第三种形式: #if 常量表达式 程序段1 #else 程序段2 #endif 它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。 End 教材204页 4。 * * * * * * * * * 第*页 刘勇 liuyong@ustc.edu.cn 中国科学技术大学 C语言程序设计讲义 2011 * * * * * * * *

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档