收藏 分销(赏)

预处理位操作.pptx

上传人:可**** 文档编号:847822 上传时间:2024-03-29 格式:PPTX 页数:15 大小:126.21KB
下载 相关 举报
预处理位操作.pptx_第1页
第1页 / 共15页
预处理位操作.pptx_第2页
第2页 / 共15页
预处理位操作.pptx_第3页
第3页 / 共15页
预处理位操作.pptx_第4页
第4页 / 共15页
预处理位操作.pptx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、Neusoft Group Ltd.Date:24 三月 2024课程主要内容课程主要内容预处理位操作问题与习题Neusoft Group Ltd.Date:24 三月 2024第一部分第一部分 专题专题Neusoft Group Ltd.Date:24 三月 2024主要内容主要内容 1.1 宏定义1.2 条件编译1.3 文件包含2.1 位操作Neusoft Group Ltd.Date:24 三月 20241.1 1.1 宏定义宏定义(1)(1)宏定义普通宏#definePI(3.1415926)带参数的宏#definemax(a,b)(a)(b)?(a),(b)取消定义#undefMac

2、roName为什么要用宏定义维护性:有时我们需要将某个特定数据(如某个数据表的大小)在程序中出现的所有实例统统加以修改,我们希望能够只做一个改动就达到目的#defineMAXSIZE100在函数调用的时候会带来重大的系统开销,因此我们有时希望有一个程序块,看上去像一个函数,但却没有函数调用的开销#definemax(a,b)(a)=(b)?(a):(b)提高程序的易读性:文字比数字要容易理解多,一个好的宏名可以顾名思义。Neusoft Group Ltd.Date:24 三月 20241.1 1.1 宏定义宏定义(2)(2)宏定义的特点宏定义值使用宏名代替一个字符串,不做语法检查对程序中用双括

3、号括起来的字符串内部的字符,即使与宏名相同,也不进行替换函数调用和宏定义的区别函数调用时,先求出实参表达式的值,然后代入形参。而使用带参数的宏只是进行简单的字符替换对于函数调用,对实参要进行类型检查,如果实参与形参类型不一致,应进行类型转换,如果无法转换,编译时会出错。但是宏定义不会做类型检查宏定义和类型定义的区别宏定义不做语法检查,可以把任何字符串定义成类型#defineAinteger/*integer不是一个合法的类型*/使用宏定义结果有时与预期的不同#defineT1structstudent*Typedefstructstudent*T2;T1a,b;/*相当于structstude

4、nt*a,b,b不是结构体指针,与预期的不同*/T2a,b;Neusoft Group Ltd.Date:24 三月 20241.1 1.1 宏定义宏定义(3)(3)使用宏定义需要注意使用宏定义需要注意不要忽视宏定义中的空格#definef(x)(x)+1 /实际上是把f 定义成了(x)(x)+1 对于不带参数的宏,若宏值多于一项,一定要使用括号#define MAX(M+N)要给每个参数加上括号,否则可能会影响计算的优先级#defineabs(x)(x=0)?x:-xz=abs(a+b);/*相当于z=(a+b=0)?a+b:-a+b/修改后#defineabs(x)(x)=0?(x):-(

5、x)尽量用typedef而不是宏定义去定义类型Neusoft Group Ltd.Date:24 三月 20241.2 1.2 条件编译条件编译条件编译例子条件编译例子#ifdefBMW#defineSIZE16#else#defineSIZE32#endif条件编译指令条件编译指令#ifdef#ifdef#else#else#endif#endif#ifndef#ifndef#else#else#endif#endif#if 1#if 1#else#else#endif#endif#if 0#if 0#else#else#endif#endif条件编译的应用条件编译的应用解决头文件重复包含的

6、问题在调试时,用条件编译的方式将debug语句加入;在修改Bug时候,用条件编译方式引入新的修正,并保留原来的程序;Neusoft Group Ltd.Date:24 三月 20241.3 1.3 文件包含文件包含头文件包含include“xxxx.h”含义是在编译时将头文件的内容加入到包含文件中。头文件包含的方式include“xxxx.h”到本级目录去找。include到系统默认目录和本级目录去找。重复包含(重复定义)由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的通过条件编译开关来避免重复包含(重复定义)例如#ifndef _headerfile

7、XXX_ define _headerfileXXX_ 文件内容#endifNeusoft Group Ltd.Date:24 三月 20242.12.1位操作位操作(1)(1)基本位操作符基本位操作符如(0 x01)4=0 x08位操作应用举例位操作应用举例乘法、除法,例如a*8可以写成a3;地址计算,例如一个32位的地址装在元素类型是char的数组a4中(假设按照从低到高存放),那么计算这个地址的方法为(a324)|(a216)|(a18)|a0容易出现的问题容易出现的问题尽量使用无符号变量,避免产生符号错误;注意避免发生数据溢出;Neusoft Group Ltd.Date:24 三月

8、20242.12.1位操作位操作(2)(2)位运算符例子分析位运算符例子分析请分析下面问题的含义。#typedefunsignedcharUINT1#typedefunsignedshortUINT2#typedefunsignedlongUINT4问题1:#defineMC_GET_CHAR(_data_)(*(UINT1*)(_data_)问题2:#defineMC_GET_SHORT(_data_)(UINT2)(UINT2)(*(UINT1*)(_data_)8)|(UINT2)(*(UINT1*)(_data_)+1)&0 x00ff)Neusoft Group Ltd.Date:2

9、4 三月 20242.12.1位操作位操作(3)(3)问题3:#defineMC_GET_LONG(_data_)(UINT4)MC_GET_SHORT(_data_)16)|(UINT4)MC_GET_SHORT(_data_+2)&0 x0000ffff)问题4:#defineMC_GET_3BN(_data_)(UINT4)MC_GET_CHAR(_data_)16)|(UINT4)MC_GET_SHORT(_data_+1)&0 x0000ffff)Neusoft Group Ltd.Date:24 三月 2024第二部分第二部分 问题与习题问题与习题Neusoft Group Ltd.Date:24 三月 2024问题表问题表Q1:取消一个宏的定义,该如何做?Q2:写宏函数时应注意哪些问题?Q3:如何避免头文件的重复包含?Q4:进行位运算时应该注意什么?Neusoft Group Ltd.Date:24 三月 2024练习题练习题习题6详细参见习题集。习题7详细参见习题集。Neusoft Group Ltd.Date:24 三月 2024谢谢!

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服