En C, si declaro una estructura/unión/enumeración:¿Cuál es el razonamiento detrás de typedef vs struct/union/enum, no podría haber solo un espacio de nombres?
struct Foo { int i ... }
cuando quiero usar mi estructura que tenga que especificar la etiqueta:
struct Foo foo;
a perder este requisito, tengo que alias de mi estructura mediante typedef:
typedef struct Foo Foo;
por qué no tienen todos los tipos/estructuras/lo que sea en el mismo "espacio de nombres" por defecto? ¿Cuál es el razonamiento detrás de la decisión de requerir la etiqueta de declaración en cada declaración de variable (a menos que se tipifique)?
Muchos otros idiomas no hacen esta distinción, y parece que solo está trayendo un nivel extra de complejidad en mi humilde opinión.
No es más complejo que '#define LPFOO * FOO' todo sobre el lugar :(Sin embargo, en la mayoría de los códigos he visto que a struct Foo y Foo se les asignan diferentes nombres (por ejemplo, Foo_t y Foo o incluso) están en diferentes 'espacios de nombres' para el compilador. –
¿Puede mencionar cuáles son "otros idiomas" excepto C++? – Arun
@Arun: C# y Java no colocan sus tipos en un "espacio de nombre de etiqueta separado" (pero pueden estar en un espacio de nombres verdadero, incluido el espacio de nombres global, que es un poco diferente del espacio de nombres de etiquetas introducido por C) – paercebal