Структурообразование в фундаментной структуре

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

typedef const struct __CFUUID * CFUUIDRef;

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

1 ответ

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

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

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

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

    • Это делает код короче и читабельнее.

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

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

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

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

licensed under cc by-sa 3.0 with attribution.