可能重复:
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) –