为什么C中的运算符sizeof(函数)输出1个字节

时间:2012-09-08 00:08:42

标签: c sizeof

  

可能重复:
  Why is the size of a function in C always 1 byte?

请考虑C中的以下代码段:

double fn()
{
    return 1.1 ;
}

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

output是:

1

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

2 个答案:

答案 0 :(得分:4)

sizeof运算符不应该应用于函数。它毫无意义,其行为没有定义。

  

size运算符不应用于具有的表达式   功能或不完整类型,......

参考:ISO/IEC 14882 (section 5.3.3)


  

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

参考:ISO/IEC 9899:1999 (section 6.5.3.4)


  

sizeof运算符可能不适用于:

     
      
  • 位字段
  •   
  • 功能类型
  •   
  • 未定义的结构或类
  •   
  • 不完整类型(例如无效)
  •   

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

答案 1 :(得分:2)

当您对某个函数使用sizeof时,它的值毫无意义,如此处所述Why is the size of a function in C always 1 byte?

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

然而,为了获得函数占用的字节数,不幸的是,无法进行移植。如果你告诉我们你真正想要完成的事情,我们可能会帮助你做更多的事情。

相关问题