Имя структуры в качестве операнда sizeof

#c #struct #sizeof

#c #структура #sizeof

Вопрос:

Когда вы определяете структуру, подобную приведенной ниже

 typedef struct num {
   int a; 
   int b; 
} A;  
  

Тогда sizeof(A) допустимо, но sizeof(num) не является. Может кто-нибудь, пожалуйста, объяснить причину, по которой оператор sizeof не принимает num ?

Комментарии:

1. num является тегом, а не типом. So sizeof(num) недопустимо, но sizeof(struct num) нормально.

2. @unwind спасибо за комментарий! Я думал, что размер — это функция…

3. @unwind В этом случае sizeof A не будет работать. Поскольку A это тип, sizeof нужны круглые скобки.

4. @IanAbbott D’oh! Конечно, ошибка мозга. Я удалю. Спасибо.

Ответ №1:

Потому num что само по себе не является типом в C (только struct num или его typedef A составляет тип). Итак, sizeof сбой, поскольку его операнд не находится ни в одной из форм, для которых он определен:

 sizeof unary-expression
sizeof ( type-name ) 
  

т. е. num не является ни типом, ни унарным выражением.

Итак, sizeof(struct num) или sizeof(A) в порядке, но sizeof(num) это не так.