sizeof 巨集實現的方法

2021-09-05 12:52:52 字數 795 閱讀 6867

---------------------------------------------

-- 建立人:ruo_xiao

---------------------------------------------

//    非陣列的sizeof

#defne _sizeof(t) ( (size_t)((t*)0 + 1))

// 陣列的sizeof

#define array_sizeof(t) ( (size_t)(&t+1) - (size_t)(&t) )

1、指標變數 + 1 ,這裡 + 的是指標型別對應的位元組數。

栗子:

_sizeof(double)
其過程如下:

1、(double *)0                  //    0x0000 0000

2、(double *)0 + 1 // 0x0000 0008

3、(size_t)((double *)0 + 1) // 8 (十六進製制轉十進位制)

2、對於陣列對應的sizeof比較特殊,舉例說明。

int isum[3];
這裡的 &isum 的指標型別是 int(*)[5],該型別所佔的位元組大小是5*4=20,故( (size_t)(&t+1)  - (size_t)(&t)  ) 的值為20。

(saw:game over!)

巨集定義,const 與 sizeof

1 define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。例如 define pi 3.1415926 程式中的 area pi r r 會替換為3.1415926 r r 如果你把 define語句中...

sizeof是如何實現的,和核心裡面巨集如出一轍

0x00 很多東西用多了就缺乏了,洞察力,覺得就該如此。這也許就是中國那句老話 當局者迷。今天看到c群裡面的乙個學生問求乙個陣列的大小如何寫,當然不由自主的敲了sizeof 0x04 sizeof是乙個運算子不是函式,但是我突然覺得,他是如何實現的那?如果是乙個字串還可以判斷末尾的 0 那對一塊記憶...

weak strong 巨集的實現

我們都知道在防止如block的迴圈引用時,會使用 weak關鍵字做如下定義 weak typeof self weakself self 後來,為了方便,不用每次都要寫這樣一句固定 我們定義了巨集 define weakself weak typeof self weakself self 之後,我...