可能重複:
Why is the size of a function in C always 1 byte?爲什麼在C運算符的sizeof(功能)輸出1字節
考慮下面的代碼片斷中C
:
double fn()
{
return 1.1 ;
}
int main()
{
printf("%d", sizeof(fn));
return 0;
}
的output是:
1
爲什麼sizeof()運算符輸出1個字節?
可能重複:
Why is the size of a function in C always 1 byte?爲什麼在C運算符的sizeof(功能)輸出1字節
考慮下面的代碼片斷中C
:
double fn()
{
return 1.1 ;
}
int main()
{
printf("%d", sizeof(fn));
return 0;
}
的output是:
1
爲什麼sizeof()運算符輸出1個字節?
的sizeof
運營商不應該被應用到的功能。這是沒有意義的,它的行爲沒有定義。
大小操作者不得應用於具有 功能或不完整的類型,表達...
參考:ISO/IEC 14882 (section 5.3.3)
sizeof運算符不得應用於函數類型爲 或不完整類型的表達式,並將其應用於這種加括號的名稱 類型或指定位域成員的表達式。
參考:ISO/IEC 9899:1999 (section 6.5.3.4)
sizeof運算符可以不被應用到:
- 的位字段
- 函數類型
- 未定義結構或類
- 一個不完整的類型(如無效)
這只是一個編譯器的參考,但我不會相信它作爲所有編譯器的定義來源。 –
這只是因爲我花了一段時間才找到所有的參考文獻,這是我發現的第一個。我已經知道了答案,只是想在發現所有信息之前發佈它。 – ronalchn
當你在一個函數中使用sizeof
,它的價值是沒有意義的,因爲這裏所描述Why is the size of a function in C always 1 byte?
要獲得大小返回值的,請嘗試使用sizeof(fn())
,因爲sizeof
是一個編譯時間常數(在大多數情況下),fn
不會真的被調用,但是。
但是,不幸的是,要獲得函數佔用的字節大小,不可能做到可移植。如果你告訴我們你真正想要完成的事情,我們可以幫助你做更多。
顯然,我不希望大小爲返回類型的大小。我期待32位體系結構上32位指針的大小。那麼爲什麼只有1個字節? –
嘗試'sizeof(&fn)'。函數不會衰減到'sizeof'上下文中的指針。 –
你究竟想在這裏完成什麼? –
['sizeof' returns'size_t'必須使用'%zu'打印出來](http://stackoverflow.com/q/940087/995714) –