![C语言宏定义技巧(常用宏定义)_第1页](http://file1.renrendoc.com/fileroot_temp2/2021-2/24/32346e84-2c6f-44c6-b743-85b397e62e38/32346e84-2c6f-44c6-b743-85b397e62e381.gif)
![C语言宏定义技巧(常用宏定义)_第2页](http://file1.renrendoc.com/fileroot_temp2/2021-2/24/32346e84-2c6f-44c6-b743-85b397e62e38/32346e84-2c6f-44c6-b743-85b397e62e382.gif)
![C语言宏定义技巧(常用宏定义)_第3页](http://file1.renrendoc.com/fileroot_temp2/2021-2/24/32346e84-2c6f-44c6-b743-85b397e62e38/32346e84-2c6f-44c6-b743-85b397e62e383.gif)
![C语言宏定义技巧(常用宏定义)_第4页](http://file1.renrendoc.com/fileroot_temp2/2021-2/24/32346e84-2c6f-44c6-b743-85b397e62e38/32346e84-2c6f-44c6-b743-85b397e62e384.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C 语言宏定义技巧(常用宏定义)等等。写好 C 语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 下面列举一些成熟软件中常用得宏定义、 、1. 防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H/头文件内容#endif2. 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便 移植。typedefunsigned charboolean;typedefunsigned long intuint32;typedefunsigned shortuint16;typedefunsigned charuint
2、8;typedefsigned long intint32;typedefsigned shortint16;typedefsigned charint8;/下面的不建议使用typedefunsigned charbyte;typedefunsigned shortword;typedefunsigned longdword;typedefunsigned charuint1;typedefunsigned shortuint2;typedefunsigned longuint4;typedefsigned charint1;typedefsigned shortint2;typedeflon
3、g intint4;typedefsigned longsint31;typedefsigned shortsint15;typedefsigned charsint7;/* Boolean value type. */ /* Unsigned 32 bit value */* Unsigned 16 bit value */* Unsigned 8 bit value */* Signed 32 bit value */* Signed 16 bit value */* Signed 8 bit value */* Unsigned 8 bit value type. */ /* Unsin
4、ged 16 bit value type. */ /* Unsigned 32 bit value type. */* Unsigned 8 bit value type. */ /* Unsigned 16 bit value type. */ /* Unsigned 32 bit value type. */ /* Signed 8 bit value type. */ /* Signed 16 bit value type. */ /* Signed 32 bit value type. */ /* Signed 32 bit value */ /* Signed 16 bit val
5、ue */* Signed 8 bit value */3. 得到指定地址上的一个字节或字#define MEM_B( x ) ( *( (byte *) (x) ) )#define MEM_W( x ) ( *( (word *) (x) ) )4. 求最大值和最小值#define MAX( x, y ) ( (x) (y) ? (x) : (y) )#define MIN( x, y ) ( (x) field ) /*lint +e545 */6. 得到一个结构体中field所占用的字节数#define FSIZ( type, field ) sizeof( (type *) 0)-f
6、ield )7. 按照 LSB 格式把两个字节转化为一个 Word#define FLIPW( ray ) ( (word) (ray)0) * 256) + (ray)1 )8. 8,按照 LSB 格式把一个 Word 转化为两个字节#define FLOPW( ray, val ) (ray)0 = (val) / 256); (ray)1 = (val) & 0xFF)9. 得到一个变量的地址(word宽度)#define B_PTR( var ) ( (byte *) (void *) &(var) )#define W_PTR( var ) ( (word *) (void *) &
7、(var) )10. 得到一个字的高位和低位字节#define WORD_LO(xxx) (byte) (word)(xxx) & 255) #define WORD_HI(xxx) (byte) (word)(xxx) 8)11. 返回一个比 X 大的最接近的 8的倍数#define RND8( x )(x) + 7) / 8 ) * 8 )12. 将一个字母转换为大写#define UPCASE( c ) ( (c) = a & (c) = 0 & (c) = 0 & (c) = A & (c) = a & (c) (val) ? (val)+1 : (val)16. 返回数组元素的个数#
8、define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a0) ) )17. 返回一个无符号数 n 尾的值MOD_BY_POWER_OF_TWO(X, n)=X%(2 n)#define MOD_BY_POWER_OF_TWO( val, mod_by ) ( (dword)(val) & (dword)(mod_by)-1) )18. 对于 IO 空间映射在存储空间的结构,输入输出处理#define inp(port)#define inpw(port)#define inpdw(port)#define outp(port, val)#define
9、outpw(port, val)(*(volatile byte *) (port) (*(volatile word *) (port) (*(volatile dword *)(port)(*(volatile byte *) (port) = (byte) (val) (*(volatile word *) (port) = (word) (val)#define outpdw(port, val) (*(volatile dword *) (port) = (dword) (val)19. 使用一些宏跟踪调试A N S I 标准说明了五个预定义的宏名。它们是: _ L I N E _
10、F I L E _ D A T E _ T I M E _ S T D C _如果编译不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序 也许还提供其它预定义的宏名。_ L I N E _及_ F I L E _宏指令在有关# l i n e的部分中已讨论,这里讨论其余的宏名。_ D AT E _宏指令含有形式为月 /日/年的串,表示源文件被翻译到代码时的日期。 源代码翻译到目标代码的时间作为串包含在 _ T I M E _中。串形式为时:分:秒。如果实现是标准的,则宏 _ S T D C _含有十进制常量 1。如果它含有任何其它数,则实现 是非标准的。可以定义宏,例如 :当定义了 _DEBUG ,输出数据信息和所在文件所在行#ifdef _DEBUG#define DEBUGMSG(msg,date) printf(msg);printf(“ %d%d%”d ,date,_LINE_,_FILE_)#else#define DEBUGMSG(msg,date)#endif
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品经销合同范本:三方合作案例分析
- 业务合作合同协议范本
- 专利许可经营合同(七)
- 商家合作协议合同范本
- 交通事故赔偿合同样本模板
- 人事聘用合同模板集锦
- 专利技术合作合同模板
- 临海市农产品收购及种植基地合同协议
- 不动产权益抵押借款合同书
- 2025届毕业生实习保障合同
- Unit6AtthesnackbarStorytimeDiningwithdragons(课件)译林版英语四年级上册
- 2023年四川省公务员录用考试《行测》真题卷及答案解析
- 机电一体化系统设计-第5章-特性分析
- 2025年高考物理复习压轴题:电磁感应综合问题(原卷版)
- 雨棚钢结构施工组织设计正式版
- 医院重点监控药品管理制度
- 2024尼尔森IQ中国本土快消企业调研报告
- 2024年印度辣椒行业状况及未来发展趋势报告
- 骨科医院感染控制操作流程
- 铸铝焊接工艺
- 《社区康复》课件-第六章 骨关节疾病、损伤患者的社区康复实践
评论
0/150
提交评论