2011-09-08 15 views
12

Powiel możliwe:
Why is FILE all-caps as in FILE*?standardowa biblioteka `typ file`

Dlaczego biblioteka standardowa FILE typ napisane wielkimi literami?
Czy to z powodu swojej nieprzejrzystej natury?

Dziękuję.

+3

To Dobre pytanie: Typy systemu UNIX, które są z grubsza równoczesne (np. 'time_t') mają małe litery, takie jak wbudowane typy C. –

+2

Klucz nasadki klucza został zerwany, a termin był zbyt krótki –

+0

Pierwotnie jednak nie było prosty plik d zamiast tego używane są eskryptory? (zwykłe liczby całkowite ol i wbudowane były małe: 'stdin',' stdout', 'stderr'.) Może' PLIK' miał rozróżniać użycie deskryptora i używania uchwytu pliku. –

Odpowiedz

5

Jeśli spojrzeć na konwencji nazewnictwa stosowanych w C, górna obudowa jest zazwyczaj używany do makr preprocesora. Domyślam się, że pierwotnie został zaimplementowany jako makro rozwijające się do konkretnego typu używanego przez implementację biblioteki.

1

Nie jest to typ nieprzezroczysty, zwykle jest to struktura C, ale jego pola są zdefiniowane w implementacji.

Myślę, że wielka jest bo historia ...

+1

Nadal nazywam to "nieprzejrzystym", o ile specyfikacja nie zawiera obietnic dotyczących właściwości danego rodzaju lub zawartości takich obiektów. –

0

Nie jestem pewien, ale zauważ, że w standardowej bibliotece C jest zadeklarowanych kilka typów. Prawdopodobnie FILE był pierwszym zdefiniowanym, a styl * _t nie został jeszcze wynaleziony.

Albo w wersjach pierwotnych c było makro ... pomyśleć, co się stało, zanim wynalazł typedef:

#define FILE struct __file 

Zamiast:

typedef struct __file FILE; 
+2

Masz swoje '# define' wstecz ... –

+0

Ups! Poprawione – rodrigo

3

Od here

" Ściśle mówiąc, w C typ pliku jest zdefiniowany przez bibliotekę (w nagłówku stdio.h) jako typ (patrz słowo kluczowe typedef.) Nie trzeba używać typu PLIK jako taki, tylko FIL E * (wskaźnik do PLIKU). To (jeden z;) zabawnych idiomów języka C. Jak zwykle, typ pliku alias oznacza biblioteki określonej strukturze, ale bezpośrednio nie korzystać z jego członków (to realizacja podmiot zależny) „

także this.

typedef FILE *stream; 

Wreszcie here:

Powiązane problemy