2011-09-08 19 views
12

Eventuali duplicati:
Why is FILE all-caps as in FILE*?libreria standard `tipo file`

maiuscolo perché è il tipo di libreria standard FILE scritto?
È a causa della sua natura opaca?

Grazie.

+3

Questo è un buona domanda: i tipi di sistema UNIX che sono i relativi contemporanei approssimativi (ad es. 'time_t') hanno nomi di minuscole, come i tipi C incorporati –

+2

Il loro tasto di blocco maiuscolo era rotto e la scadenza era troppo breve –

+0

semplice file d invece sono stati usati degli escriptori? (plain 'ol interi, e quelli built-in erano in minuscolo: 'stdin',' stdout', 'stderr'.) Forse' FILE' doveva distinguere tra usare un descrittore e usare un handle di file. –

risposta

5

Se si guarda alla convenzione di denominazione utilizzata in C, maiuscolo è in genere utilizzato per le macro del preprocessore. La mia ipotesi è che originariamente è stata implementata come una macro che si espande al tipo concreto usato dall'implementazione della libreria.

1

Non è un tipo opaco, di solito è una struttura C, ma i suoi campi sono definiti dall'implementazione.

Credo che il maiuscolo è perché la storia ...

+1

Lo chiamerei ancora "opaco" a patto che le specifiche non promettano le proprietà del tipo sottostante o il contenuto di tali oggetti. –

0

Non sicuro, ma si noti che ci sono solo alcuni tipi dichiarati nella libreria C standard. Probabilmente il FILE è stato il primo definito e lo stile * _t non è stato ancora inventato.

O forse nelle versioni primitive c era una macro ... pensare cosa è successo prima hanno inventato la typedef:

#define FILE struct __file 

Invece di:

typedef struct __file FILE; 
+2

Hai il tuo '# define' all'indietro ... –

+0

Oops !!! corretto – rodrigo

3

Da here

" A rigor di termini, in C il tipo FILE è una libreria definita (nell'intestazione stdio.h) alias (vedi typedef keyword). Non è necessario usare il tipo FILE come tale, solo FIL E * (puntatore a FILE) tipo. È (uno dei;) idiomi divertenti del linguaggio C. Come di consueto, il tipo FILE alias indicata libreria definito struttura, ma non utilizzare i suoi membri direttamente (è attuazione entità dipendente) "

anche this:.

typedef FILE *stream; 

Infine here:

Problemi correlati