I saw some C code like this:
// A:
typedef uint32_t in_addr_t;
struct in_addr { in_addr_t s_addr; };
And I always prefer like this:
// B:
typedef uint32_t in_addr;
So my question is: what’s the difference / benefit of doing it in A from B?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
It’s a layer to introduce type safety, and it can be helpful ‘for future expansion’.
One problem with the former is that it’s easy to ‘convert’ a value of a type represented by a typedefed builtin to any of several other types or typedefed builtins.
consider:
versus:
In some cases, it makes it a little clearer to use a notation, and the compiler will also forbid erroneous conversions. Consider:
this is a suspicious program. using typedefed ints, that’s a valid program. Using structs, it’s ill-formed — compiler errors will require your corrections, and you can make your intent explicit.
Using typedefs, arbitrary arithmetic and conversions may be applied, and they may be assigned to each other without warning, which can can become a burden to maintain.
Consider also:
that would also be a fatal conversion.
It’s just another tool in the toolbox — use at your discretion.