20个成熟软件中常用的宏定义,赶快收藏

写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用的宏定义。

1.防止一个头文件被重复包含

1defineCOMDEF_H3//头文件内容4defineMEM_B(x)(*((byte*)(x)))2defineMAX(x,y)(((x)(y))?(x):(y))2defineFPOS(type,field)\2/*lint-e545*/((dword)((type*)0)-field)/*lint+e545*/

6.得到一个结构体中field所占用的字节数

1defineFLIPW(ray)((((word)(ray)[0])*256)+(ray)[1])

8.按照LSB格式把一个Word转化为两个字节

1defineB_PTR(var)((byte*)(void*)(var))2defineWORD_LO(xxx)((byte)((word)(xxx)255))2defineRND8(x)((((x)+7)/8)*8)

12.将一个字母转换为大写

1defineDECCHK(c)((c)='0'(c)='9')

14.判断字符是不是16进制的数字

1defineINC_SAT(val)(val=((val)+1(val))?(val)+1:(val))

16.返回数组元素的个数

1defineMOD_BY_POWER_OF_TWO(val,mod_by)\2((dword)(val)(dword)((mod_by)-1))

18.对于IO空间映射在存储空间的结构,输入输出处理

1defineinpw(port)(*((volatileword*)(port)))3defineoutp(port,val)(*((volatilebyte*)(port))=((byte)(val)))5defineoutpdw(port,val)(*((volatiledword*)(port))=((dword)(val)))

19.使用一些宏跟踪调试

ANSI标准说明了五个预定义的宏名。它们是:

1_LINE_2_FILE_3_DATE_4_TIME_5_STDC_

如果编译不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。

_LINE_及_FILE_宏指令在有关ifdef_DEBUG2else4if

20.宏定义防止使用时错误用小括号包含。

例如:

1difneDO(a,b)a+b;\2a++;

应用时:

1if(….)2DO(a,b);//产生错误3else

解决方法:

1#difneDO(a,b)do{a+b;\2a++;}while(0)

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐