为什么 C 中结构或联合的 sizeof 需要一个变量?

Why sizeof of a structure or union in C need a variable?

无法编译以下代码(GCC)。上面说这个人和u_type是未申报的。如果我在 sizeof() 中使用变量,就可以了。那么为什么在 sizeof() 中需要一个变量。 The GNU C Reference Manual 表示 sizeof 运算符可以与类型和表达式一起使用。

谢谢,

struct person {
  int age;
  char *name;
};

union u_type {
  int t_int;
  double t_double;
};

int main(void) {
  printf("size of person is %d\n", sizeof(person));
  printf("size of u_type is %d\n", sizeof(u_type));
  return 0;
}

这是因为 sizeof 运算符需要一些它可以告诉 大小的东西。 如果它留空,它就没有什么可审查和生成答案的,但是因为你在程序中使用它时没有传递任何参数,它会报错,因为如果你理解的话 sizeof empty 有点模糊。

您的程序中没有名为 personu_type 的内容。当然你有 struct personunion u_type 但没有类型定义让你只使用 personu_type

尝试sizeof(struct person)

回答评论中的问题:

struct person { ... }; 给你一个类型:struct person- person 是一个标签。您需要使用 struct person 才能使用该类型。在这种情况下 sizeof(struct person).

struct { ... } person; 给你一个名为 person 的变量,它是一个结构(但你不能重用该类型)。在这种情况下 sizeof(person)

最常见的用法是 typedef struct { ... } Person,它为您提供类型 Person - 与第一种情况非常相似,但您可以使用 Person 而不是 struct person。在这种情况下 sizeof(Person)