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

为什么C中的运算符sizeof(函数)输出1字节,c,sizeof,C,Sizeof,可能重复: 请考虑C中的以下代码片段: double fn() { return 1.1 ; } int main() { printf( "%d", sizeof( fn ) ); return 0; } 最重要的是: 为什么sizeof()运算符输出1字节?不应将sizeof运算符应用于函数。它毫无意义,其行为也没有定义 大小运算符不得应用于具有 函数或不完整类型 参考: sizeof运算符不应应用于具有 函数类型或不完整的类型,以括号中的名称命名 指定位字段

可能重复:

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

double fn()
{
    return 1.1 ;
}

int main()
{
    printf( "%d", sizeof( fn ) );
    return 0;
}
最重要的是:


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

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

大小运算符不得应用于具有 函数或不完整类型

参考:


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

参考:


sizeof运算符不能应用于:

  • 比特场
  • 函数类型
  • 未定义的结构或类
  • 不完整的类型(例如void)

参考:

当您在函数上使用
sizeof
时,它的值没有意义,如下所述

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


不幸的是,要获得函数占用的字节大小,不可能通过可移植的方式实现。如果你告诉我们你真正想要完成什么,我们可能会帮助你做得更多。

这只是一个编译器的参考,但是,我不相信它是所有编译器的定义源。这只是因为我需要一段时间才能找到所有的参考,而这是我第一次找到。我已经知道答案了,只是想在找到所有信息之前早点发布。你到底想在这里实现什么?显然,我不希望大小与返回类型的大小相同。我希望指针的大小是32位体系结构上的32位。那为什么只有1个字节呢?试试
sizeof(&fn)
。函数不会衰减为
sizeof
上下文中的指针。
1