5 ms·
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
by pavlov 2y 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.
- sebstefan 2y ago>Use typedef? What if you're given somebody else's code and you need to understand it to put a typedef there
- DaiPlusPlus 2y agoWelp, if it’s that bad then shrug and use a #define (Yes, this is a joke)
- CuriousCosmic 2y agoThe 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.
- dapperdrake 2y agoReading C Type Declarations: http://unixwiz.net/techtips/reading-cdecl.html http://unixwiz.net/techtips/reading-cdecl.html (NOT the author. It simply helped me.)
- khrbtxyz 2y agoFunction 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/0a9b9d17f3a781dea03baca01c835deaa07f7cc3/drivers/gpu/drm/drm_edid.c#L2317 https://github.com/torvalds/linux/blob/0a9b9d17f3a781dea03ba...