valor una ingresar funciones estructuras estructura datos con como asignar arreglo array c struct typedef

una - ¿Por qué deberían los nombres de estructura tener un typedef?



scanf estructuras c (7)

He visto códigos fuente siempre teniendo un typedef para una estructura y usando el mismo en todas partes en lugar de usar el nombre de la estructura como "struct sname" etc. directamente?

Cuál es la razón detrás de esto? ¿Hay alguna ventaja al hacer esto?


De hecho, no uso typedef para las estructuras. ¿Por qué? Porque de todos modos usaría alguna convención como un prefijo s_ , para ver fácilmente qué tipo de variable estoy viendo.

Dado que uso muchos tipos de datos abstractos, creo que sería una buena idea usar un typedef, de modo que el usuario realmente lo use como un tipo opaco. Pero en la práctica siempre uso una estructura en la implementación de todos modos.


Es solo para la legibilidad del código. typedefs son solo para dar un nuevo nombre para el tipo de datos. En lugar de dar int en todos los lugares donde puede nombrarlo de la manera que desee y donde quiera que use int, puede simplemente reemplazarlo por el nuevo nombre que ha dado. Lo mismo se aplica a las estructuras también.


Es una peculiaridad extraña en el lenguaje C, los nombres de etiquetas de estructura se almacenan en un espacio de nombres diferente (tabla de símbolos). El lenguaje C ++ se deshizo de este comportamiento. El typedef crea un alias para el tipo de estructura en el espacio de nombres global. Entonces no tiene que escribir "struct" antes del nombre de la estructura.

No estoy seguro de qué estaba fumando Ritchie cuando definió este comportamiento. Supongo que hay algún tipo de problema con el analizador en una versión anterior del compilador.


Me gusta hacer esto en C:

// in a "public" header file typedef struct Example Example; // in a "private" header or a source file struct Example { ... };

Así, tengo el Example como un tipo opaco (es decir, solo puedo pasarle los punteros) a lo largo de mi código, excepto por el código que implementa sus operaciones, que puede ver cómo se define realmente. (Podría usar un nombre diferente para el tipo opaco pero no hay una ventaja real para eso).


Un nombre de estructura no definido en C requiere que se agregue "struct" en cualquier lugar donde se use el nombre de tipo, por lo que la mayoría de las personas usan typedef para crear un nuevo nombre para el tipo que no necesita tener la palabra clave struct todo el tiempo.

Las razones para hacer esto son la legibilidad del código, la reducción del tipado y, probablemente, la claridad también, pero los tipos pueden oscurecer la información sobre los tipos de punteros.

Honestamente, la necesidad de tipear para crear nuevos nombres para las estructuras es una reliquia, y es una pena que C99 no siga el ejemplo de C ++ y lo elimine.


Es más fácil de leer Box b; que struct boxtype b;

typedef struct _entry{ char *name; int id; } Entry, *EntryP;

Ventaja:
En el typedef anterior, Entry & EntryP se definen aparte de struct _entry .
Por lo tanto, EntryP firstentry se puede usar en lugar de struct _entry *firstentry y es un poco más simple de analizar en mente.

Nota: No es como los nombres de las estructuras deben ser de tipo typedef , pero evidentemente es más fácil de leer. Además, el uso de Entry * vs EntryP es totalmente dependiente del usuario.


Es una forma de ocultación de información y útil al crear tipos opacos. Vea este enlace SO para una respuesta un poco más larga.