第13章编译预处理课件培训课件

上传人:heye****123 文档编号:137977457 上传时间:2020-07-13 格式:PPT 页数:13 大小:269KB
返回 下载 相关 举报
第13章编译预处理课件培训课件_第1页
第1页 / 共13页
第13章编译预处理课件培训课件_第2页
第2页 / 共13页
第13章编译预处理课件培训课件_第3页
第3页 / 共13页
第13章编译预处理课件培训课件_第4页
第4页 / 共13页
第13章编译预处理课件培训课件_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《第13章编译预处理课件培训课件》由会员分享,可在线阅读,更多相关《第13章编译预处理课件培训课件(13页珍藏版)》请在金锄头文库上搜索。

1、第13章 编译预处理,作用:对源程序编译之前做一些处理,生成扩展C源程序 种类 宏定义 #define 文件包含 #include 条件编译 #if-#else-#endif等 格式: “#”开头 占单独书写行 语句尾不加分号,如 if(x=YES) printf(“correct!n”); else if (x=NO) printf(“error!n”); 展开后: if(x=1) printf(“correct!n”); else if (x=0) printf(“error!n”);,13.1 宏定义 不带参数宏定义 一般形式: #define 宏名 宏体 功能:用指定标识符(宏名)代替

2、字符序列(宏体),宏展开:预编译时,用宏体替换宏名-不作语法检查,如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);,宏体可缺省,表示宏名 定义过或取消宏体,定义位置:任意(一般在函数外面) 作用域:从定义命令到文件结束 #undef可终止宏名作用域 格式: #undef 宏名,宏定义可嵌套,不能递归,例 #define MAX MAX+10 (),引号中的内容与宏名相同也不置换,例 #define PI 3.14159 printf(“2*PI=%fn”,PI*2); 宏展开

3、:printf(“2*PI=%fn”,3.14159*2);,宏定义中使用必要的括号(),例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2; 宏展开:var= 80+40 *2;,带参数宏定义 一般形式: #define 宏名(参数表) 宏体,例 #define S (r) PI*r*r 相当于定义了不带参宏S,代表字符串“(r) PI*r*r”,宏展开:形参用实参换,其它字符保留 宏体及各形参外一般应加括号(),例 #define S(a,b) a*b . area=S(3,2); 宏展开: area=3*2;,不能加空格,例 #

4、define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展开:z=x+y*x+y; 一般写成: #define POWER(x) (x)*(x) 宏展开: z=(x+y)*(x+y);,13.2 文件包含 功能:一个源文件可将另一个源文件的内容全部包含进来 一般形式: #include “文件名” 或 #include ,处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译, 直接按标准目录搜索 “” 先在当前目录搜索,再搜索标准目录 可指定路径,被包含文件内容 源文件(*.c) 头文件(*.h),宏定义 数据结构定义

5、函数说明等,文件包含可嵌套,例 文件包含举例,13.3 条件编译,条件编译可有效地提高程序的可移植性,并广泛地应用在商业软件中,为一个程序提供各种不同的版本。,13.3.1 #ifdef #endif和#ifndef #endif命令,1一般格式 ifdef 标识符 程序段1; else 程序段2; endif 2功能:当“标识符”已经被#define命令定义过,则编译程序段1,否则编译程序段2。 (1)在不同的系统中,一个int 型数据占用的内存字节数可能是不同的。,(2)利用条件编译,还可使同一源程序即适合于调试(进行程序跟踪、打印较多的状态或错误信息),又适合高效执行要求。 3关于#ifndef #endif命令 格式与#ifdef #endif命令一样,功能正好与之相反。,13.3.2 #if #endif,1一般格式 if 常量表达式 程序段1; else 程序段2; endif 2功能:当表达式为非0(“逻辑真”)时,编译程序段1,否则编译程序段2。,例 输入一个口令,根据需要设置条件编译,使之能将口令原码输出,或仅输出若干星号“*”。 #define PASSWORD 0 /*预置为输出星号*/ main() /*条件编译*/ #if PASSWORD /*源码输出*/ #else /*输出星号*/ #endif ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号