題這幾天面試題會遇到一些關於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 會產生巨集的 剖析 這個面試題主要考查面試者對巨集定義的使用,巨集定義可以實現類似於函式的功能,但是它終...