Почему sizeof структуры или объединения в C нуждается в переменной? - PullRequest
0 голосов
/ 21 мая 2018

Код ниже не может быть скомпилирован (GCC).Это сказало, что человек и u_type необъявлены.Если я использую переменную в sizeof (), это нормально.Так зачем нужна переменная в sizeof (). Справочное руководство GNU C говорит, что оператор 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;
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

В вашей программе нет ничего, что называется person или u_type.Конечно, у вас есть struct person и union u_type, но нет typedefs, чтобы вы могли просто использовать person и u_type

Попробуйте sizeof(struct person)

Чтобы ответить на вопросы в комментариях:

struct person { ... }; Дает вам тип: struct person - где человек является тегом.Вам нужно использовать struct person, чтобы использовать тип.В этом случае sizeof(struct person).

struct { ... } person; Дает вам переменную с именем person, которая является структурой (но вы не можете повторно использовать тип).В этом случае sizeof(person)

Наиболее распространенное использование - typedef struct { ... } Person, которое дает вам тип Person - очень похоже на первый случай, но вы можете использовать Person вместо struct person.В этом случае sizeof(Person)

0 голосов
/ 21 мая 2018

Это потому, что оператору sizeof нужно что-то, для чего он может сказать размер .Если его оставить пустым, он не будет ничего проверять и генерировать ответ, но, поскольку вы использовали его в программе, не передавая аргументы, он выдаст ошибку, потому что sizeof empty является немного неопределенным, если вы понимаете.

...