版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程主要内容预处理位操作问题与习题第一部分专题主要内容
1.1宏定义1.2条件编译1.3文件包含2.1位操作1.1宏定义(1)宏定义普通宏#definePI(3.1415926)带参数的宏#definemax(a,b)((a)>(b)?(a),(b))取消定义#undef MacroName为什么要用宏定义维护性:有时我们需要将某个特定数据(如某个数据表的大小)在程序中出现的所有实例统统加以修改,我们希望能够只做一个改动就达到目的#defineMAXSIZE100在函数调用的时候会带来重大的系统开销,因此我们有时希望有一个程序块,看上去像一个函数,但却没有函数调用的开销#definemax(a,b)(((a)>=(b))?(a):(b))提高程序的易读性:文字比数字要容易理解多,一个好的宏名可以顾名思义。1.1宏定义(2)宏定义的特点宏定义值使用宏名代替一个字符串,不做语法检查对程序中用双括号括起来的字符串内部的字符,即使与宏名相同,也不进行替换函数调用和宏定义的区别函数调用时,先求出实参表达式的值,然后代入形参。而使用带参数的宏只是进行简单的字符替换对于函数调用,对实参要进行类型检查,如果实参与形参类型不一致,应进行类型转换,如果无法转换,编译时会出错。但是宏定义不会做类型检查宏定义和类型定义的区别宏定义不做语法检查,可以把任何字符串定义成类型#defineAinteger/*integer不是一个合法的类型*/使用宏定义结果有时与预期的不同#defineT1structstudent*Typedefstructstudent*T2;T1a,b;/*相当于structstudent*a,b,b不是结构体指针,与预期的不同*/T2a,b;1.1宏定义(3)使用宏定义需要注意不要忽视宏定义中的空格#definef(x)(x)+1//实际上是把f定义成了(x)(x)+1
对于不带参数的宏,若宏值多于一项,一定要使用括号#defineMAX(M+N)要给每个参数加上括号,否则可能会影响计算的优先级#defineabs(x)(x>=0)?x:-xz=abs(a+b);/*相当于z=(a+b>=0)?a+b:-a+b//修改后#defineabs(x)((x)>=0?(x):-(x)尽量用typedef而不是宏定义去定义类型1.2条件编译条件编译例子
#ifdefBMW #defineSIZE16 #else#defineSIZE32 #endif条件编译指令#ifdef…#else…#endif#ifndef…#else…#endif#if1…#else…#endif#if0…#else…#endif条件编译的应用解决头文件重复包含的问题在调试时,用条件编译的方式将debug语句加入;在修改Bug时候,用条件编译方式引入新的修正,并保留原来的程序;1.3文件包含头文件包含#include“xxxx.h”含义是在编译时将头文件的内容加入到包含文件中。头文件包含的方式#include“xxxx.h”到本级目录去找。#include<xxxx.h>到系统默认目录和本级目录去找。重复包含(重复定义)由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的通过条件编译开关来避免重复包含(重复定义)例如#ifndef__headerfileXXX__
#define__headerfileXXX__
…文件内容
…#endif2.1位操作(1)基本位操作符<<,>>如(0x01)<<4=0x10;(0x80)>>4=0x08位操作应用举例乘法、除法,例如a*8可以写成a<<3;地址计算,例如一个32位的地址装在元素类型是char的数组a[4]中(假设按照从低到高存放),那么计算这个地址的方法为((a[3]<<24)|(a[2]<<16)|(a[1]<<8)|a[0]容易出现的问题尽量使用无符号变量,避免产生符号错误;注意避免发生数据溢出;2.1位操作(2)位运算符例子分析请分析下面问题的含义。
#typedefunsignedchar
UINT1
#typedefunsignedshort
UINT2
#typedefunsignedlong
UINT4问题1:
#define
MC_GET_CHAR(__data__)
\ (*((UINT1*)(__data__))) 问题2: #defineMC_GET_SHORT(__data__)\ ((UINT2)((((UINT2)(*((UINT1*)(__data__))))<<8)\ |((UINT2)(*((UINT1*)(__data__)+1)))&0x00ff)))2.1位操作(3) 问题3:
#define
MC_GET_LONG(__data__)
\ ((((UINT4)MC_GET_SHORT((__data__)))<<16)\ |(((UINT4)MC_GET_SHORT(__data__+2))&0x0000ffff)) 问题4:
#defineMC_GET_3BN(__data__)
\ ((((UINT4)MC_GET_CHAR((__data__)))<<16)\ |(((UINT4)MC_GET_SHORT(__data__+1))&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 涂装设备控制柜操作规范
- 齐齐哈尔市梅里斯达斡尔族区2025届数学四年级第二学期期中达标测试试题(含答案)
- 黔南布依族苗族自治州惠水县2025-2026学年数学三年级下学期期末联考模拟试题(含答案)
- 2025广东广州花都城投铁工建设工程有限公司招聘广州花都诚锐建设有限公司和广州花都城兴建设有限公司工作人员综合总及背景调查环节人员笔试历年难易错考点试卷带答案解析
- 2025年陕西好邦食品股份有限公司招聘(20人)笔试历年备考题库附带答案详解
- 2025年秋季云南省农村信用社校园招聘12人笔试历年典型考题及考点剖析附带答案详解
- 2025年甘肃金兴建设工程有限公司招聘22人笔试历年典型考点题库附带答案详解
- 2025年滁州理想建设投资发展有限公司公开招聘2名笔试历年典型考点题库附带答案详解
- 2025年河北石家庄市鹿泉区公开招聘企业工作人员10名笔试历年典型考点题库附带答案详解
- 2026年哨点医院呼吸道样本采样与送检工作规范模板
- 2026天津石油职业技术学院招聘20人笔试题库带答案详解(B卷)
- 2026年交管12123驾驶证学法减分试题(含参考答案)
- 2025年临沂市公安机关招录警务辅助人员笔试真题
- 部编版五升六语文暑假衔接作业完整版 基础巩固+新知预习含答案可打印
- 2026年(完整版)国家GCP培训考试题库及参考答案(完整版)
- 2026年廊坊银行人员招聘笔试备考试题及答案详解
- (2026年)手卫生规范与职业防护培训课件
- 幼儿园保健医岗位职责培训试题及答案
- 从零开始学量价分析(短线操盘-盘口分析与A股买卖点实战)
- PCI术后血脂管理
- 睡眠呼吸障碍合并哮喘的诊疗策略-1
评论
0/150
提交评论