【发布时间】:2012-09-08 00:08:41
【问题描述】:
考虑C中的以下代码sn-p:
double fn()
{
return 1.1 ;
}
int main()
{
printf( "%d", sizeof( fn ) );
return 0;
}
output 是:
1
为什么 sizeof() 操作符输出的是 1 个字节?
【问题讨论】:
考虑C中的以下代码sn-p:
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 运算符可能不适用于:
- 一个位域
- 函数类型
- 未定义的结构或类
- 不完整的类型(例如 void)
【讨论】:
当你在一个函数上使用sizeof时,它的值是没有意义的,就像这里描述的Why is the size of a function in C always 1 byte?
要获取返回值的大小,请尝试使用sizeof(fn()),因为sizeof 是编译时常量(在大多数情况下),但是fn 不会真正被调用。
不幸的是,要获得函数占用的字节大小是不可能的。如果您告诉我们您真正想要完成的工作,我们可能会帮助您做得更多。
【讨论】:
sizeof(&fn)。函数不会衰减到 sizeof 上下文中的指针。