implementation of sizeof operator

Raghu Srikanth Reddy picture Raghu Srikanth Reddy · Jan 5, 2013 · Viewed 23k times · Source

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..

Answer

NPE picture NPE · Jan 5, 2013

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.