-1

可能重复:
为什么 C 中函数的大小总是 1 个字节?

考虑以下代码片段C

double fn()
{
    return 1.1 ;
}

int main()
{
    printf( "%d", sizeof( fn ) );
    return 0;
}

输出是:

1

为什么 sizeof() 运算符输出 1 个字节?

4

2 回答 2

4

sizeof运算符不应应用于函数。它是没有意义的,它的行为没有定义。

大小运算符不应应用于具有函数或不完整类型的表达式,...

参考:ISO/IEC 14882(第 5.3.3 节)


sizeof 运算符不得应用于具有函数类型或不完整类型的表达式、此类类型的括号名称或指定位字段成员的表达式。

参考:ISO/IEC 9899:1999(第 6.5.3.4 节)


sizeof 运算符可能不适用于:

  • 一个位域
  • 函数类型
  • 未定义的结构或类
  • 不完整的类型(如 void)

参考:http: //publib.boulder.ibm.com/

于 2012-09-08T00:11:20.770 回答
2

当您sizeof在函数上使用时,它的值是没有意义的,如此处所述Why is the size of a function in C always 1 byte?

要获取返回值的大小,请尝试使用sizeof(fn()),因为sizeof它是编译时常量(在大多数情况下),fn但实际上不会被调用。

然而,不幸的是,要获得函数占用的字节大小是不可能的。如果您告诉我们您真正想要完成的工作,我们可能会帮助您做更多事情。

于 2012-09-08T00:11:27.893 回答