Nada de esto se aplica a C++
. En C++
prefieren:
struct Foo
{
. . .
};
El resto sólo se aplica a C
.
Técnicamente struct Foo {};
es suficiente para la mayoría de los propósitos. Sin embargo, es un poco detallado para usar como struct
debe repetirse cada vez que se utiliza el tipo Foo.
struct Foo {}
void func(struct Foo* foo);
typedef lo hace más simple.
struct Foo { };
typedef struct Foo Foo;
void func(Foo* foo);
Esto se puede acortar aún más con:
typedef struct Foo { } Foo;
void func(Foo* foo);
Al hacer un chiste también es posible utilizar esta sintaxis:
typedef struct { } Foo;
void func(Foo* foo);
Esto está creando un anónimo struct
y luego dando es el nombre Foo. Esto se ve más a menudo con enum
s.
typedef enum { } Bar;
Existe una razón por la cual el Foo redundante inicial generalmente se deja allí. Es solo la única forma de crear una estructura de autorreferencia, como una lista vinculada.
typedef struct Node
{
Node* next;
} Node;
Si la inicial Node
donde omite, no habría manera de declarar un puntero a la estructura. Técnicamente, esto también es válido, pero ahora tienes que encontrar dos nombres, en lugar de solo uno.
typedef struct node_
{
node_* next;
} Node;
Entonces, ¿por uso:
typedef struct Foo { } Foo;
Para uniformidad. Este estilo de declaración cubre todas sus bases, por lo que nunca tendrá que pensar al declarar una estructura.
Eso es C, no C++. ¿Seguro que te estás refiriendo al idioma correcto? –
C o C++, no hay diferencia en este ejemplo. Busque typedef en google o en sus libros. –
@gbrandt: Sí, pero no hay ninguna razón para declarar una estructura de esa manera en C++. –