巨集定義使用技巧

2021-08-04 22:11:24 字數 1276 閱讀 5917

題這幾天面試題會遇到一些關於define 的用法,在這裡做下總結,紅色部分筆試常見題型。

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

#ifndef comdef_h

#define comdef_h

//標頭檔案內容

#endif

2.得到乙個字的高位和地位位元組

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

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

3.求最大值和最小值

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

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

4.得到指定位址上的乙個位元組或字

#define  mem_b (x)    (  *( (byte *)  (x) ) )

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

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

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

6.得到乙個變數位址

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

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

7.防止溢位的乙個方法

#define inc_sat (val)  (val = ( (val)+1)  > (val) ) ? (val) +1 : (val) )

8.按照lsb格式把兩個字轉化成乙個word

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

9.按照lsb格式把乙個word轉化成兩個字

#define flopw ( ray,val)    (ray) [0] = ((val) / 256)  (ray) [1] =  ((val) & 0xff) 

巨集定義使用技巧

巨集定義使用技巧 1 把列舉值轉換為字串 define caseenum e case e printf e 2 利用二進位制表示式得到編譯期常量 define cat a,b a b cat 1,2 12 3 給標準斷言新增描述性注釋 define assertmsg a,b assert a b...

巨集定義的使用技巧

參考部落格 1 防止乙個標頭檔案被重複包含 ifndef bodydef h define bodydef h 標頭檔案的內容 endif 2 重定義一些型別,防止由於各種平台和編譯器的不同,而產生的型別位元組數的差異,方便移植。typedef unsigned char boolean 3 得到指...

巨集定義相關技巧

寫乙個 標準 巨集min,這個巨集輸入兩個引數並返回較小的乙個。另外,當你寫下面的 時會發生什麼事 least min p b 解答 define min a,b a b a b min p b 會產生巨集的 剖析 這個面試題主要考查面試者對巨集定義的使用,巨集定義可以實現類似於函式的功能,但是它終...