C语言中宏定义技巧.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言宏定义写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性?等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef?COMDEF_H #define?COMDEF_H ??//头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef??unsigned?char??????boolean;?????/*?Boolean?value?type.?*/ typedef??unsigned?long?int??uint32;??????/*?Unsigned?32?bit?value?*/ typedef??unsigned?short?????uint16;??????/*?Unsigned?16?bit?value?*/ typedef??unsigned?char??????uint8;???????/*?Unsigned?8??bit?value?*/ typedef??signed?long?int????int32;???????/*?Signed?32?bit?value?*/ typedef??signed?short???????int16;???????/*?Signed?16?bit?value?*/ typedef??signed?char????????int8;????????/*?Signed?8??bit?value?*/ 3,求最大值和最小值 ?#define??MAX(?x,?y?)?(?((x)??(y))???(x)?:?(y)?) ?#define??MIN(?x,?y?)?(?((x)??(y))???(x)?:?(y)?) ,得到指定地址上的一个字节或字 #define??MEM_B(?x?)??(?*(?(byte?*)?(x)?)?) #define??MEM_W(?x?)??(?*(?(word?*)?(x)?)?) ,得到一个结构体中field所占用的字节数 #define?FSIZ(?type,?field?) ?sizeof(?((type?*)?0)-field?) ,得到一个field在结构体(struct)中的偏移量 #define?FPOS(?type,?field?) /*lint?-e545?*/?(?(dword)?((?type?*)?0)-?field?)?/*lint?+e545?*/ 7,按照LSB格式把两个字节转化为一个Word #define??FLIPW(?ray?)?(?(((word)?(ray)[0])?*?256)?+?(ray)[1]?) 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?*)?(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)?=?z)???((c)?-?0x20)?:?(c)?) 13,判断字符是不是16进值的数字 #define??HEXCHK(?c?)?(?((c)?=?0??(c)?=?9)?||\ ???????????????????????((c)?=?A??(c)?=?F)?||\ ((c)?=?a??(c)?=?f)?) 14,判断字符是不是10进值的数字 #define??DECCHK(?c?)?((c)?=?0??(c)?=?9) 15,防止溢出的一个方法 #define??INC_SAT(?val?)??(val?=?((val)+1??(val))???(val)+1?:?(val)) 16,返回数组元素的个数 #define??ARR_SIZE

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档