At first glance, adding a typedef to a struct in C seems to complicate the definition. However, it simplifies the declaration of the structure. This is not always recommend, as it can add a layer of obfuscation.
Structures
Here is how a normal structure is defined in C.
#include <stdio.h> #include <string.h> struct Cat { // defining Cat structure char name[20]; // members of Cat structure int age; int weight; }; int main() { struct Cat myCat; // declaring Cat structure, myCat strcpy( myCat.name, "Cleopatra"); // setting member values myCat.age = 4; myCat.weight = 10; return 0; }
In the example above, notice declaring myCat on Line 11 is “struct Cats myCat”. We are about to see how typedef will shorten this.
Typedef
#include <stdio.h> #include <string.h> typedef struct { // defining Cat structure char name[20]; // members of Cat structure int age; int weight; } Cat; int main() { Cat myCat; // declaring Cat structure, myCat strcpy( myCat.name, "Cleopatra"); // setting member values myCat.age = 4; myCat.weight = 10; return 0; }
Notice how Line 11 has shortened to “Cat myCat”.
When declaring many structs throughout a large project, this can save some typing and sometimes increase readability.
Criticism
Typedefs on structure isn’t popular with everyone. Most prominently, the Linux kernel does not use typedefs for structures. A quote from the Linux Kernel Coding Style:
“It’s a **mistake** to use typedef for structures and pointers. When you see a
.. code-block:: c
vps_t a;
in the source, what does it mean?
In contrast, if it says
.. code-block:: c
struct virtual_container *a;
you can actually tell what “a“ is.”
Nonetheless, you are sure to encounter typedef structures. Try not to add any more to the world.