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