2012-09-08 32 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'上下文中的指针。 –

相关问题