Стандартная библиотека `FILE` типа
Возможный дубликат:
Почему все ФАЙЛЫ ФАЙЛА, как в ФАЙЛЕ *?
Почему стандартная библиотека FILE
записывается в верхнем регистре?
Это из-за его непрозрачности?
Спасибо.
Ответы
Ответ 1
Если вы посмотрите на соглашение об именах, используемое в C, верхний регистр обычно используется для макросов препроцессора. Я предполагаю, что он первоначально был реализован как макрос, расширяющийся до конкретного типа, используемого в реализации библиотеки.
Ответ 2
От здесь
"Строго говоря, в C тип FILE - это библиотека, определенная в заголовке типа stdio.h(см. ключевое слово typedef). Не нужно использовать тип FILE как таковой, только тип FILE * (указатель на FILE). Это (один из;) C язык смешные идиомы.
Как обычно, псевдоним типа FILE обозначает структуру, определенную библиотекой, но не использует ее члены напрямую (объект, зависящий от реализации).
Также this:
typedef FILE *stream;
Наконец здесь:
Ответ 3
Это не непрозрачный тип, он обычно является структурой C, но его поля определены как реализация.
Я предполагаю, что прописная буква - это история...
Ответ 4
Не уверен, но обратите внимание, что в стандартной библиотеке C имеется только несколько типов. Вероятно, FILE
был самым первым, и стиль * _t еще не был изобретен.
Или, может быть, в примитивных версиях C это был макрос... подумайте, что произошло до того, как они придумали typedef
:
#define FILE struct __file
Вместо:
typedef struct __file FILE;