#define max( x, y ) ( ((x) > (y)) ? (x) : (y) )
#define min( x, y ) ( ((x) < (y)) ? (x) : (y) )
/*舉例,addr 為 0x83*/
addr =
min(
0x83
,0x84);
/*addr 等於 0x83*/
/*乙個陣列中的前兩個位元組轉化為乙個32位位元組*/
#define flipw_ray( ray ) ( (((uint32) (ray)[0]) * 256) + (ray)[1] )
uint32 temp;
uint8 buff[2]
=;temp =
flipw_ray
(buff)
;/*temp 等於 0xaabb*/
/*兩個位元組轉化為乙個32位位元組*/
#define flipw_var( varh,varl ) ( (((uint32) (varh)) * 256) + (varl) )
uint32 temp;
uint8 var_1 =
0xaa
,var_2 =
0xbb
;temp =
flipw_var
(var_1 ,var_2)
;/*temp 等於 0xaabb*/
/*把乙個32位位元組轉化為乙個陣列中的兩個位元組*/
#define flopw_ray( ray, val ) (ray)[0] = ((val) / 256); (ray)[1] = ((val) & 0xff)
uint32 addr =
0xabcd
;uint8 buff[2]
;flopw_ray
(buff,addr)
;/*buff[0] 為 0xab ,buff[1] 為 0xcd*/
/*把乙個32位位元組轉化為兩個8位變數值*/
#define flopw_var( varh, varl, val ) (varh) = ((val) / 256); (varl) = ((val) & 0xff)
uint8 aa =0;
uint8 bb =0;
uint32 addr =
0x3421
;flopw_var
(aa,bb,addr)
;/*aa 為 0x34 ,bb 為 0x21*/
#define rndn( x ,n) ((((x) + (n - 1)) / (n) ) * (n))
uint8 aa =0;
aa =
rndn(7
,8);
/*aa 為 8*/
#define upcase( ch ) ( ((ch) >= 'a' && (ch) <= 'z') ? ((ch) - 0x20) : (ch) )
uint8 aa =0;
aa =
upcase
('q');
/* aa 為 'q' 的大寫 『q' */
#define arr_size( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) )
uint8 aa =0;
uint8 buff[11]
;aa =
arr_size
(buff)
;/* aa 為 11*/
#define swap(x, y) \
x = x + y;\
y = x - y;\
x = x - y;
uint8 aa =
0xcc
;uint8 bb =
0xbb
;swap
(aa,bb)
;/* aa 變為了 0xbb, bb 變為了 0xcc*/
C語言常用巨集定義
01 防止乙個標頭檔案被重複包含 ifndef comdef h define comdef h 標頭檔案內容 endif 02 重新定義一些型別,防止由於各種平台和編譯器的不同,而產生的型別位元組數差異,方便移植。typedef unsigned char boolean boolean valu...
C語言常用巨集定義
c語言常用巨集定義 01 防止乙個標頭檔案被重複包含 ifndef comdef h define comdef h 標頭檔案內容 endif 02 重新定義一些型別,防止由於各種平台和編譯器的不同,而產生的型別位元組數差異,方便移植。typedef?unsigned char?boolean ty...
C語言巨集定義和巨集定義函式
c語言巨集定義和巨集定義函式 巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式...