Hacker News new | ask | show | jobs
by pavlov 588 days ago
Use typedef?

Granted, the function pointer syntax is forever confusing (to me anyway). The rest is easily tackled by naming things.

Even for function pointers, it’s just one lookup and then you can copy-paste the typedef for any other function pointer types in the project.

3 comments

Function typedefs make this less confusing by removing awkward parentheses. e.g.

  typedef int read_block_fn(void *context, u8 *buf, unsigned int block, size_t len);
https://github.com/torvalds/linux/blob/0a9b9d17f3a781dea03ba...
Reading C Type Declarations: http://unixwiz.net/techtips/reading-cdecl.html

(NOT the author. It simply helped me.)

>Use typedef?

What if you're given somebody else's code and you need to understand it to put a typedef there

The trick is to just assert equal types. Most compilers have extensions that allow you to easily compare type equality (and C23 actually standardizes the `typeof()` operator).

So you basically take your ugly type, put it in a #define and then create a static assertion that matches the type against said ugly type.

Now the compiler will throw a shit fit if the types don't match. Have fun breaking the type up into smaller pieces until you have something legible.

Welp, if it’s that bad then shrug and use a #define

(Yes, this is a joke)