2013-12-14 5 views
0

У меня есть некоторые базовые знания об объекте c и как объявить и использовать Struct и как использовать Typedef для того, чтобы вызвать Struct проще, однако я вижу много странного сложного использования и объявления Struct, что я понятия не имею. Ниже один из них, который определен в классе «CFUUID.h» в рамках фондаstruct dclaration in foundation framework

typedef const struct __CFUUID * CFUUIDRef; 

может кто-нибудь объяснить, что здесь происходит, это не обычный способ определения структуры в соответствии с тем, что я прочитали до сих пор. Значит, это означает, что Struct будет константой, которую нельзя изменить позже? Является ли название Struct _CFUUID? Зачем нужен этот указатель и что такое typedef делает здесь относительно указателя?

ответ

2

Я думаю, что SO не является учебником C. Во всяком случае короткий ответ.

  1. Это не определение структуры. Это определение типа (typedef).

  2. Определение типа является чем-то вроде псевдонима: Идентификатор (CFUUIDRef) обозначает тип, упомянутый перед ним. (const struct __CFUUID * aka указатель на структуру с идентификатором __CFUUID.).

  3. Определение типа имеет ряд преимуществ:

    • Это делает код короче и более читаемым.

    • Он инкапсулирует информацию (например, классы). Например, «реальный» тип может быть изменен без нарушения существующего кода, который только ретранслирует на CFUUIDRef вместо его внутреннего определения. (Вот почему вы не должны спрашивать, что такое struct __CFUUID. Они не хотят, чтобы вы это спрашивали. Это секрет.)

    • Это облегчает работу, если этот тип является частью другой конструкции. (Т. е. Массив.)

  4. Да, const делает его постоянным. Никто не должен менять UUID.

  5. Использование указателей дает другой уровень косвенности. Это имеет много преимуществ. Кроме того, передача указателя вокруг (1 слово cpu) выполняется быстрее, чем копирование всей структуры (2 или 4 слова процессора).

+0

Нет, это будет 'struct __CFUUID * const CFUUIDRef' –