Soy consciente de dos posibles maneras de definir y utilizar struct
s:código struct escritura que funciona tanto en C y en C++
#1
struct person
{
char name[32];
int age;
};
struct person dmr = {"Dennis Ritchie", 70};
#2
typedef struct
{
char name[32];
int age;
} person;
person dmr = {"Dennis Ritchie", 70};
La propiedad interesante de la primera manera es que tanto el tipo como la variable puede tener el mismo nombre:
struct person person = {"Sam Persson", 50};
¿Es eso idiomático en C? ¿Está garantizado para trabajar en C++? ¿O hay casos de esquina que debería conocer?
Tenga en cuenta que no estoy interesado en respuestas puras de C++ (por ejemplo, "use std::string
en lugar de char[32]
"). Esta es una pregunta acerca de la compatibilidad C/C++.
No llamaría a esa "propiedad interesante" más bien una propiedad oscurecedora. Es mejor mantener los nombres de tipos comenzando desde mayúsculas, para distinguir los nombres de tipo y variable. –
He marcado esto como duplicado de [typedef struct vs struct definitions] (http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions). Técnicamente puede considerar que no lo es (la otra pregunta solo trata sobre C) pero la semántica es la misma en C++ con la única diferencia de que la búsqueda también encontrará símbolos en el espacio identificador definido por el usuario si no los encuentra en el espacio de identificador global. Eso también se trata en la respuesta aceptada (que contiene bits de C++) –
Además, son ** no ** dos formas de definir una 'struct', hay una sola forma de definir una' struct' (que puede tener o no es un nombre), y hay 'typedef's (que se pueden aplicar a un tipo nombrado o sin nombre), pero no son dos maneras de definir una 'estructura' en cualquier caso. Y te falta 3), combinando ambos: 'typedef struct type {} type;' para lo que vale (que es la forma idiomática de C) –