2011-09-08 10 views
12

Duplicar posibles:
Why is FILE all-caps as in FILE*?biblioteca estándar `tipo FILE`

mayúsculas ¿Por qué es el estándar de tipo de biblioteca FILE escrito?
¿Es por su naturaleza opaca?

Gracias.

+3

Esa es una buena pregunta. Los tipos de sistema UNIX que son sus contemporáneos ásperos (por ejemplo, 'time_t') tienen nombres en minúscula, como los tipos de C integrados. –

+2

Su clave de bloqueo de mayúsculas estaba rota y la fecha límite demasiado corta. –

+0

Originalmente wouldn wouldn 't simple archivo d los escriptores se han usado en su lugar? (llanas 'ol enteros, y los incorporados fueron minúsculas: 'stdin',' stdout', 'stderr'.) Tal vez' FILE' fue para diferenciar entre el uso de un descriptor y el uso de un identificador de archivo. –

Respuesta

5

Si nos fijamos en la convención de nomenclatura utilizada en C, mayúsculas se utiliza normalmente para las macros del preprocesador. Mi suposición es que originalmente se implementó como una macro expansión al tipo concreto utilizado por la implementación de la biblioteca.

1

No es un tipo opaco, por lo general es una estructura C, pero sus campos están definidos por la implementación.

supongo que la mayúscula es porque la historia ...

+1

Todavía lo llamaría "opaco", siempre que la especificación no haga ninguna promesa sobre las propiedades del tipo subyacente o el contenido de dichos objetos. –

0

No estoy seguro, pero tenga en cuenta que solo hay unos pocos tipos declarados en la biblioteca C estándar. Probablemente el FILE fue el primero definido, y el estilo * _t aún no se inventó.

O tal vez en las versiones primitivas C era una macro ... pensar en lo que pasó antes de que se inventaron la typedef:

#define FILE struct __file 

En lugar de:

typedef struct __file FILE; 
+2

Tienes tu '# define' al revés ... –

+0

¡Uy! Corregido – rodrigo

3

De here

" Estrictamente hablando, en C el tipo de ARCHIVO es una biblioteca definida (en el encabezado stdio.h) tipo de alias (vea la palabra clave typedef). No es necesario usar el tipo de ARCHIVO como tal, solo FIL E * (puntero a ARCHIVO) tipo. Es (uno de;) modismos divertidos del lenguaje C. Como por lo general, el tipo de archivo de alias denota biblioteca definida la estructura, pero no utilizan sus miembros directamente (es entidad dependiente de la implementación) "

también this:.

typedef FILE *stream; 

Finalmente here:

Cuestiones relacionadas