获取C语言中函数的大小

4

假设有以下代码:

#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,这是返回类型的大小,这种做法正确吗?这不是未定义的吗?

1个回答

3
sizeof运算符应用于函数是一个约束违规。这样做会引起未定义行为
此约束在C标准第6.5.3.4p1节中有明确规定,涉及sizeof运算符:
不得将sizeof运算符应用于具有函数类型的表达式或不完整类型、该类型的括号名称或指定位域成员的表达式。不得将_Alignof运算符应用于函数类型或不完整类型。

如果我使用sizeof(a()))而不是sizeof(a))会怎样呢?现在它打印出了返回类型的大小4,这是正确的吗?为什么它不是未定义的? - user13366635
1
@Alex sizeof(a()))是有效的,因为a()的类型是int,这是函数的返回类型。 "这是正确的方式吗?" 做什么? - dbush
使用%d打印size_t也会引发未定义行为。必须使用%p - phuclv
@phuclv %p 是指针。%zusize_t - dbush
@dbush,是的,我打错了,应该是%zu而不是%p - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接