常用巨集定義

2021-08-08 03:56:56 字數 2144 閱讀 3749

1

防止乙個標頭檔案被重複包含 

#ifndef comdef_h 

#define comdef_h 

//標頭檔案內容 

#endif 

檔案開頭處#define debug,在**中加除錯**#ifdef debug{}#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  mem_b( x )  ( *( (byte *) (x) ) ) 

#define  mem_w( x )  ( *( (word *) (x) ) ) 

得到乙個變數的位址(word寬度) 

#define  b_ptr( var )  ( (byte *) (void *) &(var) ) 

#define  w_ptr( var )  ( (word *) (void *) &(var) ) 

4求最大值和最小值 

#define  max( x, y ) ( ((x) > (y)) ? (x) : (y) ) 

#define  min( x, y ) ( ((x) < (y)) ? (x) : (y) ) 

5按照lsb格式把兩個位元組轉化為乙個word 

#define  flipw( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] ) 

按照lsb格式把乙個word轉化為兩個位元組 

#define  flopw( ray, val ) \ 

(ray)[0] = ((val) / 256); \ 

(ray)[1] = ((val) & 0xff) 

得到乙個字的高位和低位位元組 

#define  word_lo(***)  ((byte) ((word)(***) & 255)) 

#define  word_hi(***)  ((byte) ((word)(***) >> 8)) 

6得到乙個field在結構體(struct)中的偏移量 

#define fpos( type, field ) \ 

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

得到乙個結構體中field所占用的位元組數 

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

7將乙個字母轉換為大寫 

#define  upcase( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) ) 

8返回陣列元素的個數 

#define  arr_size( a )  ( sizeof( (a) ) / sizeof( (a[0]) ) ) 

9對於io空間對映在儲存空間的結構,輸入輸出處理 

#define inp(port)         (*((volatile byte *) (port))) 

#define outp(port, val)   (*((volatile byte *) (port)) = ((byte) (val))) 

常用巨集定義總結

今天,和一位oasis談了一些關於巨集定義的一些問題,頗有所得。特錄於此。起因是他看到open sourc中經常有這樣的原始碼,感覺無法理解 define swap a,b do while 0 總感覺這樣的定義中的do while有點蛇足的味道,感覺真的是沒有什麼必要。開始我也是這樣覺得的,因為是...

iOS常用巨集定義

獲取當前螢幕的寬高 define kscreenw uiscreen mainscreen bounds size.width define kscreenh uiscreen mainscreen bounds size.height 判斷當前系統版本 define ios9 uidevice c...

iOS 常用巨集定義

字串是否為空 define kstringisempty str str iskindofclass nsnull class str nil str length 1?yes no 陣列是否為空 define karrayisempty array array nil array iskindof...