编译预处理与位运算

上传人:206****923 文档编号:51718297 上传时间:2018-08-16 格式:PPT 页数:29 大小:145KB
返回 下载 相关 举报
编译预处理与位运算_第1页
第1页 / 共29页
编译预处理与位运算_第2页
第2页 / 共29页
编译预处理与位运算_第3页
第3页 / 共29页
编译预处理与位运算_第4页
第4页 / 共29页
编译预处理与位运算_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《编译预处理与位运算》由会员分享,可在线阅读,更多相关《编译预处理与位运算(29页珍藏版)》请在金锄头文库上搜索。

1、第十章 编译预处理与位运算【教学要求】1了解预编译的概念,掌握宏定义的 方法。2了解“文件包含”与预处理的应用 。3了解条件编译的几种形式。4掌握各种位运算符,运算规则和优 先级。5了解位运算的实际应用。6了解位段的定义和应用。第十章 编译预处理与位运算教学要点 编译预处理 宏定义 文件包含 条件编译 位运算 位段 应用举例编译预处理一、含义: 编译预处理是C编译系统的一个组成部 分。 二、目的: 将预处理的结果和源程序一起再进行通 常的编译处理,以得到目标代码。 三、实现方法: 通过使用几种特殊的命令,在进行程序 的编译之前,先对这些特殊命令进行处理。 四、主要内容: 1.宏定义; 2.文件

2、包含; 3.条件编译.宏定义一、不带参数的宏定义: 1、含义:用一个指定的标识符来表示一个字符串。 2、格式: #define 标识符字符串其中:“标识符”被称为宏。 3、作用:使用户能以一个简单的名字代替一个长的字 符串。 4、实现:在预编译时将宏名替换成字符串(宏展开) 。如:#define PI 3.14159在程序中将标识符PI代替为“3.1415”这个字符串 。 5、应用举例: 6、使用要点:例exp10_1:分析下列的程序: #define PI3.1415 main() float i,s,r,v;printf(“input radius:”);scanf(“%f”,i=2.0*

3、PI*r;s=PI*r*r;v=3.0/4*PI*r*r*r;printf(“i=%10.4fns=%10.4nv=%10.4fn”,i,s,v ); 1.宏名一般都用大写字母表示,以区别于变量; 2.宏定义只是用宏名替代一个字符串,减少了在程序中书 写某些字符串的工作量,只是一个简单的代替,不作语法 检查; 3.宏定义不是语句,不必再其后加上“;”; 4.#define命令出现在函数的外面,它的有效范围是定义 之后到本源文件的结束; 5.可以使用#undef命令终止宏定义的有效范围; 6.在宏定义中可以进行多层的替代. #definre R 3.0 #define PI 3.1415 #de

4、fine L 2*PI*R #define S PI*R*R main() printf(“L=%fnS=%fn”,L,S);二、带参数的宏定义 1、定义:#define 宏名(参数表) 字符串例如:#define s(a,b)a*b.area=s(3,2);2、作用:不只是进行简单的字符串替换,还要进行参数的置 换。 3、应用举例: 4、宏展开过程的要点:area=S(3,2)#define S(a,b)a*b得3*2例exp10_2:分析程序写出结果. #define PI 3.1415 #define S(r) PI*r*r main() float a,area;a=3.6;area=

5、S(a);printf(“r=%fnarea=%fn”,a,are a); 1.对于带参数的宏的展开依就是用实际参数代替宏定义 时的形式参数;请注意与函数的调用存在差别。 2.在宏定义时,宏名与带参数的括号之间不应加空格,不 然的话,空格也作为字符的组成部分; 3.在宏代换时,不应人为地加上括号. 例exp10_3:分析程序写出结果. #define M3 #define NM+2 #define S(N) N*N*N main() printf(“%dn”,S(N); 运行结果为:17文件包含1、含义: 将一个源文件的内容完全包含在另一个文件之 中. 2、一般形式:#include “文件名

6、”(或)file1.c file2.c file1.c3、功能:可以节省程序设计人员的重复劳动。 4、应用举例: 5、使用要点:#include “flie2.c”ABBA例exp10_3:分析程序写出 结果: file.h #define PR printf #define NL n #define D “%d” #define D1 D NL #define D2 D D NL #define D3 D D D NL #define D4 D D D D NL #define S “%s”file.c #include “file.h” main() int a,b,c,d;char st

7、r=“CHINA”;a=1,b=2,c=3,d=4;PR(D1,a);PR(D2,a,b);PR(D3,a,b,c);PR(D4,a,b,c,d);PR(S,str); 1、一个#include命令只能指定一个被包含的文件,若 要包含n个文件,应使用n个#include命令; 2、若文件1包含文件2,而文件2中要用到文件3的内容 ,则可在文件1中用2个#include命令分别包含文件2和 文件3,而且文件3应出现在文件2之前,如下表示: file1.c #include “file3.h” #include “file2.h” . 3、文件包含可以嵌套。 4、“”与时,系统只按指定的标准方式检

8、索其他目录; 5、预编译后的包含文件和源程序文件成为一个文件, 所有的extern变量将成为源程序文件中的全局静态变 量。条件编译一、引入条件编译的原因: 只对源程序中满足条件的部分内容进行编译。 可以减少被编译的语句,从而减少目标程序的 长度。 二、定义形式: 方式1: #ifdef 标识符 程序段1 #else 程序段2 #endif 三、举例:方式2: #ifndef 标识符 程序段1 #else 程序段2 #endif方式3: #ifdef 表达式 程序段1 #else 程序段2 #endif例exp10_4:分析程序写出结果: #define LETTER 1 main() char str20=“C Language”,c;int i=0;while(c=stri!=0) i+;#if LETTERif(c=a 2.运算对象只能为整型或字符型数据. 3、各个位运算符号的使用: 1.按位与运算(1) 清零,如果要将某个存储单元清零,则找到 一个数,它的补码中的各位的值,与原来存储单元的 各位的值的与运算的结果为0,则这两个数的与的结 果为0,这样就可以达到使原来的单元清零的目的. 如:00110110scanf(“%o”,b=a4;c=(0a & cA & cZ) c=c+32; #endif printf(”%c“,c); printf(“n“);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

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