巨集定義使用技巧:
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)
void* p = null;
assertmsg(p, "p is null.");
4、編譯期斷言
#define cassert(expn) typedef char __c_assert__[(expn)?1:-1]
cassert(sizeof(myenum) == sizeof(unsigned int));
5、得到乙個陣列裡面的元素個數
#define enumele(array) (sizeof(array) / sizeof((array)[0]))
6、在乙個字串中加入__line__
系統已定義:
line__ // 在此變數出現的地方的程式行號
__file__ // 程式的檔名
__date__ // 程式編譯的日期
__teim__ // 程式編譯的時間
7、防止進入無限迴圈
static bool while_assert(bool a)
#define unique_var(x) safety_limit ## x
#define _while_limit(a, b, v) /
int unique_var(c) = b; /
while(a && while_assert(--unique_var(c)>=0))
8、小型的特製語言
9、簡化類介面
巨集定義使用技巧
題這幾天面試題會遇到一些關於define 的用法,在這裡做下總結,紅色部分筆試常見題型。1.防止乙個標頭檔案被重複包含 ifndef comdef h define comdef h 標頭檔案內容 endif 2.得到乙個字的高位和地位位元組 define word lo byte word 255...
巨集定義的使用技巧
參考部落格 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 會產生巨集的 剖析 這個面試題主要考查面試者對巨集定義的使用,巨集定義可以實現類似於函式的功能,但是它終...