What's the difference between these two declarations in C:
typedef struct square{
//Some fields
};
and
typedef struct{
//Some fields
} square;
Basically struct is used to define a structure. But when we want to use it we have to use the struct keyword in C. If we use the typedef keyword, then a new name, we can use the struct by that name, without writing the struct keyword.
The C language contains the typedef keyword to allow users to provide alternative names for the primitive (e.g., int) and user-defined (e.g struct) data types. Remember, this keyword adds a new name for some existing data type but does not create a new type.
You can't "typedef a struct", that doesn't mean anything.
PLEASE don't typedef structs in C, it needlessly pollutes the global namespace which is typically very polluted already in large C programs. Also, typedef'd structs without a tag name are a major cause of needless imposition of ordering relationships among header files.
The first declaration:
typedef struct square {
// Some fields
};
defines a type named struct square
. The typedef
keyword is redundant (thanks to HolyBlackCat for pointing that out). It's equivalent to:
struct square {
//Some fields
};
(The fact that you can use the typedef
keyword in a declaration without defining a type name is a glitch in C's syntax.)
This first declaration probably should have been:
typedef struct square {
// Some fields
} square;
The second declaration:
typedef struct {
// Some fields
} square;
defines an anonymous struct
type and then gives it the alias square
.
Remember that typedef
by itself doesn't define a new type, only a new name for an existing type. In this case the typedef
and the (anonymous) struct
definition happen to be combined into a single declaration.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With