巨集定義使用技巧

2021-04-20 08:02:51 字數 952 閱讀 5319

巨集定義使用技巧:

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