【问题标题】:Getting the size of a function in C [duplicate]在C中获取函数的大小[重复]
【发布时间】:2020-04-21 13:27:24
【问题描述】:

假设这段代码:

#include <stdio.h>

int a(){
 int b = 5;
 return b;
}

int main ()
{
  printf("%d\n", sizeof(a));
  return 0;
}

上面打印1。这是什么意思?

我知道当sizeof 用于结构时,它会获取其中数据类型的总大小(以字节为单位)。但是用在函数上是什么意思呢?

编辑:

如果我使用sizeof(a())) 而不是sizeof(a)) 会怎样。现在它正在打印4,这是返回类型的大小,这是正确的方法吗?怎么不是未定义的?

【问题讨论】:

    标签: c


    【解决方案1】:

    sizeof 运算符应用于函数是违反约束的。这样做会调用undefined behavior

    此约束在 C standard 的第 6.5.3.4p1 节中指定,关于 sizeof 运算符:

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

    【讨论】:

    • 如果我使用sizeof(a())) 而不是sizeof(a)) 会怎样。现在它正在打印4,这是返回类型的大小,这是正确的方法吗?怎么不是未定义的?
    • @Alex sizeof(a())) 是有效的,因为 a() 的类型为 int,这是函数的返回类型。 “这是正确的方法吗?”做什么?
    • %d 打印size_t 也会调用UB。必须改用%p
    • @phuclv %p 用于指针。 %zu 代表size_t
    • @dbush 是的,我打错了%p 而不是%zu
    猜你喜欢
    • 2013-04-12
    • 2015-04-04
    • 1970-01-01
    • 2014-04-30
    • 2012-02-01
    • 2017-06-03
    • 2021-02-13
    • 2011-05-05
    相关资源
    最近更新 更多