C/C++ 常用的宏定义,跨平台可移植,有效防止代码出错

整理了一些常用宏定义,优雅的同时还能防止代码出错,提升规格,让面试官眼前一亮

1. 防止一个头文件被重复包含
#ifndef _FILE_H_
#define _FILE_H_
//头文件内容
#endl

2. 重新定义一些类型,实现跨平台可移植性,防止由于平台和编译器的差异,而产生的类型字节数差异
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned long long int uint64; /* Unsigned 64 bit value */

typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed long int int64; /* Signed 64 bit value */

涉及到的位(bit)操作

typedef unsigned char byte; /* Unsigned 8 bit value type. */
typedef unsigned short word; /* Unsinged 16 bit value type. */
typedef unsigned long dword; /* Unsigned 32 bit value type. *

3. 得到指定地址上的一个字节或字
#define MEM_B( x ) ( *( (byte *) (x) ) )
#define MEM_W( x ) ( *( (word *) (x) ) )

4. 得到一个 field 在结构体(struct)中的偏移量
#define FPOS( type, field ) \
  ( (word) &(( type *) 0)-> field ) /* max limit: 2^16 -1 */

5. 得到一个字的高位和低位字节
#define WORD_LO(xxx) ((byte) ((word)(xxx) & 0xFF))
#define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8))

6. 求两个数中的最大值和最小值
#define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )
#define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )

7. 得到一个变量的地址(word宽度)
#define B_PTR( var ) ( (byte *) (void *) &(var) )
#define W_PTR( var ) ( (word *) (void *) &(var) )

8. 判断一个字符是不是10进制的数字
#define DECCHK( c ) ((c) >= '0' && (c) <= '9')

9. 判断一个字符是不是16进制的数字
#define HEXCHK( c ) 
    ( ((c) >= '0' && (c) <= '9') ||\  ((c) >= 'A' &&  (c) <= 'F') ||\
    ((c) >= 'a' && (c) <= 'f') )

10. 将一个字母转换为大写
#define UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

创作不易,动动发财的小手点个关注再走呗

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值