I have tried implementing the sizeof operator.. I have done in this way..
#define my_sizeof(x) ((&x + 1) - &x)
But it always ended up in giving the result as '1' for either of the data type..
I have then googled it for this.. and i found the code typecasted
#define my_size(x) ((char *)(&x + 1) - (char *)&x)
And the code is working if it is typecasted.. I dont understand why.. This code is also PADDING a STRUCTURE perfectly..
It is also working for
#define my_sizeof(x) (unsigned int)(&x + 1) - (unsigned int)(&x)
Can anyone please explain how is it working if typecasted and if not typecasted?
Thanks in advance..
The result of pointer subtraction is in elements and not in bytes. Thus the first expression evaluates to 1
by definition.
This aside, you really ought to use parentheses in macros:
#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)
Otherwise attempting to use my_sizeof()
in an expression can lead to errors.