Possible Duplicates:
Purpose of struct, typedef struct, in C++
typedef struct vs struct definitions
In code that I am maintaining I often see the following:
typedef enum { blah, blah } Foo;
typedef struct { blah blah } Bar;
Instead of:
enum Foo { blah, blah };
struct Bar { blah blah };
I always use the latter, and this is the first time I am seeing the former. So the question is why would one use one style over the other. Any benefits? Also are they functionally identical? I believe they are but am not 100% sure.
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.
There are two different things going on there: a typedef and an enumerated type (an "enum"). A typedef is a mechanism for declaring an alternative name for a type. An enumerated type is an integer type with an associated set of symbolic constants representing the valid values of that type.
An introduction to C Enumerated TypesUsing the typedef and enum keywords we can define a type that can have either one value or another. It's one of the most important uses of the typedef keyword. This is the syntax of an enumerated type: typedef enum { //...
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.
In C++ this doesn't matter.
In C, struct
s, enum
s, and union
s were in a different "namespace", meaning that their names could conflict with variable names. If you say
struct S { };
So you could say something like
struct S S;
and that would mean that struct S
is the data type, and S
is the variable name. You couldn't say
S myStruct;
in C if S
was a struct
(and not a type name), so people just used typedef
to avoid saying struct
all the time.
They are for C compatability. A normal
struct Bar { blah, blah };
doesn't work the same with C;
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