Каково определение неполного типа и типа объекта в C?

Каково определение неполного типа и типа объекта в C? Кроме того, не могли бы вы привести несколько примеров каждого из них?

ANSI C99 упоминает обе категории типов в разных местах, хотя мне было трудно понять, что именно означает каждая из них (нет абзаца/предложения, явно определяющего, что они из себя представляют).


person Dave    schedule 12.10.2010    source источник
comment
C99 использует ссылочный тип? Действительно? (Если у вас есть спецификация C99, в 6.2.5 подробно обсуждается система типов C; она начинается с определений трех категорий типов верхнего уровня: типов объектов, типов функций и неполных типов)   -  person James McNellis    schedule 12.10.2010
comment
Моя ошибка, это не так. Я уберу это из вопроса. Спасибо за улов!   -  person Dave    schedule 12.10.2010
comment
Это именно тот раздел, на который я ссылался, но не разместил в своем вопросе. ;) 6.2.5 упоминает эти категории верхнего уровня, но, кажется, никогда не говорит, что находится внутри них. Типы функций легко понять, но я все еще не понимаю различий между неполным типом и типом объекта. Для неполных типов типы, которые описывают объекты, но не имеют информации, необходимой для определения их размеров — что является примером чего-то, в чем отсутствует информация, необходимая для определения его размера?   -  person Dave    schedule 12.10.2010


Ответы (2)



Известные мне типы:

  • Неполный тип
  • тип объекта
  • тип функции

Вот пример (также на кодовой панели: http://codepad.org/bzovTRmz)

#include <stddef.h>

int main(void) {
    int i;
    struct incomplete *p1;
    int *p2;
    int (*p3)(void);

    p1 = NULL; /* p1 is a pointer to a incomplete type */
    p2 = &i;   /* p2 is a pointer to an object */
    p3 = main; /* p3 is a pointer to a function */

    return 0;
}

struct incomplete может быть определен (с определенным размером) в другой единице перевода. Однако этой единице перевода нужен только указатель

person pmg    schedule 12.10.2010