Say a function takes a void pointer as an argument, like so: int func(void *p);
How can we determine or guess the type of what p is pointing to?
views:
249answers:
3In general, you can't. In some cases, if there is a guarantee on what p points to, you may be able to look at the contents at and after that address to find out. Generally, your function should know what it's being passed, unless it just passes it along.
Data and function arguments in C are just a bunch of bits lumped together. Unless you use some of those bits to tell you what the bits are, there's no consistent way to identify it.
Short answer - you cannot.
In C there's no runtime time information unless you provide it, but look at the printf(3)
family and see how easy it is to shoot yourself in the foot with mismatched format spec and actual argument type.
Type system is your friend. Use it.
Sure you can, and it's easy too. It's C, do whatever you want, how you want it.
Make a type system. Put everything you pass into a structure, make the first byte or two a magic number to determine what the structure contains beyond the magic number.
Make some functions to create/get/set/destroy the "typed variables".
Make some other functions to add and register new types at runtime.
Create a few defines to make it easier to read and typecast the structs.
Before you know it you will have a nice proprietary type system you can use for your projects, and it will always do EXACTLY what you want and need because YOU made it.
You could go crazy and grow it into a full object oriented like system. Or save yourself the work, and use the work of all the other people who already went crazy - http://en.wikipedia.org/wiki/GObject