请考虑C
中的以下代码段:
double fn()
{
return 1.1 ;
}
int main()
{
printf( "%d", sizeof( fn ) );
return 0;
}
output是:
1
为什么sizeof()运算符输出1个字节?
答案 0 :(得分:4)
sizeof
运算符不应该应用于函数。它毫无意义,其行为没有定义。
size运算符不应用于具有的表达式 功能或不完整类型,......
参考:ISO/IEC 14882 (section 5.3.3)
sizeof运算符不应用于具有的表达式 函数类型或不完整类型,括号的名称 一个类型,或指定一个位字段成员的表达式。
参考:ISO/IEC 9899:1999 (section 6.5.3.4)
sizeof运算符可能不适用于:
- 位字段
- 功能类型
- 未定义的结构或类
- 不完整类型(例如无效)
答案 1 :(得分:2)
当您对某个函数使用sizeof
时,它的值毫无意义,如此处所述Why is the size of a function in C always 1 byte?
要获取返回值的大小,请尝试使用sizeof(fn())
,因为sizeof
是编译时常量(在大多数情况下),fn
将不会被真正调用,但是
然而,为了获得函数占用的字节数,不幸的是,无法进行移植。如果你告诉我们你真正想要完成的事情,我们可能会帮助你做更多的事情。