i'm a bit lost cause it makes a lot of time that i don't type any code line in C, but... if u make a sizeof a pointer type you'll get the size of the pointer, not the size of the content that this pointer points to... then... why don't you call sizeof() using the expected type that pointer points to?
the macro can result different kind of types? then probably you can make a compiler directive, or something similar depending of the macro result type?
i repeat... i'm a bit lost with C now :-D