上海花千坊

C语言

C语言宏定义的技巧

时间:2024-09-21 03:47:55 C语言 我要投稿
  • 相关推荐

关于C语言宏定义的技巧

  【提要】本篇《C语言宏定义技巧【1】》特别为需要语言编程学习的朋友收集整理的,仅供参考。内容如下:

  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 */

  //下面的不建议使用

  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. */

  typedef unsigned char uint1; /* Unsigned 8 bit value type. */

  typedef unsigned short uint2; /* Unsigned 16 bit value type. */

  typedef unsigned long uint4; /* Unsigned 32 bit value type. */

  typedef signed char int1; /* Signed 8 bit value type. */

  typedef signed short int2; /* Signed 16 bit value type. */

  typedef long int int4; /* Signed 32 bit value type. */

  typedef signed long sint31; /* Signed 32 bit value */

  typedef signed short sint15; /* Signed 16 bit value */

  typedef signed char sint7; /* 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) < (y)) ? (x) : (y) )

  5、得到一个field在结构体(struct)中的偏移量

  #define FPOS( type, field )

  /*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */

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

  #define FSIZ( type, field ) sizeof( ((type *) 0)->field )

  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 )

  &nbsp

【C语言宏定义的技巧】上海花千坊相关的文章:

C语言宏定义07-01

C语言的宏定义分析09-10

C语言预定义宏用法10-06

C语言的assert断言宏10-21

C 语言中宏的使用08-02

C语言左右法则的技巧10-03

C语言标准定义的32个关键字05-06

C语言实现自定义windows系统日志的方法08-01

C语言高效编程的4个小技巧10-27

c语言怎么定义一维数组和二维数组07-22