2012-09-08 31 views

回答

4

sizeof運營商不應該被應用到的功能。這是沒有意義的,它的行爲沒有定義。

大小操作者不得應用於具有 功能或不完整的類型,表達...

參考:ISO/IEC 14882 (section 5.3.3)


sizeof運算符不得應用於函數類型爲 或不完整類型的表達式,並將其應用於這種加括號的名稱 類型或指定位域成員的表達式。

參考:ISO/IEC 9899:1999 (section 6.5.3.4)


sizeof運算符可以不被應用到:

  • 的位字段
  • 函數類型
  • 未定義結構或類
  • 一個不完整的類型(如無效)

參考:http://publib.boulder.ibm.com/

+0

這只是一個編譯器的參考,但我不會相信它作爲所有編譯器的定義來源。 –

+0

這只是因爲我花了一段時間才找到所有的參考文獻,這是我發現的第一個。我已經知道了答案,只是想在發現所有信息之前發佈它。 – ronalchn

2

當你在一個函數中使用sizeof,它的價值是沒有意義的,因爲這裏所描述Why is the size of a function in C always 1 byte?

要獲得大小返回值的,請嘗試使用sizeof(fn()),因爲sizeof是一個編譯時間常數(在大多數情況下),fn不會真的被調用,但是。

但是,不幸的是,要獲得函數佔用的字節大小,不可能做到可移植。如果你告訴我們你真正想要完成的事情,我們可以幫助你做更多。

+0

顯然,我不希望大小爲返回類型的大小。我期待32位體系結構上32位指針的大小。那麼爲什麼只有1個字節? –

+3

嘗試'sizeof(&fn)'。函數不會衰減到'sizeof'上下文中的指針。 –

相關問題