2012-06-02 69 views
7

可能重複:
size of a datatype without using sizeof實現自己的sizeof

我的一個朋友最近出現在NVIDIA的採訪,他被要求implement his own sizeof in C的。我試圖做同樣的練習,併成功地寫sizeof其中之一的兩個不同的定義可以處理變量和其他可以處理的數據類型,但我不能將二者合併。有沒有辦法做到這一點?此外,有可能實現C.一個完整sizeof

手柄類型,如intchar

#define my_sizeof(type) ((size_t)(((type *)0) + 1)) 

處理變量一樣x

#define my_sizeof(var) (size_t)((char *)(&var+1)-(char*)(&var)) 
+0

當然,這些只是工作,因爲編譯器有效地調用的sizeof()的引擎蓋下。 .. :) –

+0

對於像你這樣的學習者來說,實現container_of和offset_of宏是個好主意。良好的學習! – Saurabh

+0

難以/不可能的一個原因當然是'sizeof'不是一個函數。這個問題有點像「是否有一種方法可以在C中實現'=',而不使用'='?」。 – unwind

回答

1

問得好

  1. 我沒有看到合併這兩者的方法。

  2. 的實現來處理,二是不安全

如果什麼用戶確實

sizeof (*ptr) 

sizeof (func()) 
+0

我想這也是一種,但可以有大量的其他方式太的sizeof使用...我決定先嚐試實施最常見的,然後比較複雜的一個...但我被困在合併部分... –