sizeof operátor je součástí specifikace jazyka C (a C++) a je implementován uvnitř kompilátoru (front-end). Neexistuje způsob, jak jej implementovat s jinými konstrukcemi C (pokud nepoužíváte rozšíření GCC jako typeof), protože může jako operand přijímat buď typy nebo výrazy, aniž by to mělo vedlejší efekt (např. sizeof((i>1)?i:(1/i)) nezhroutí se, když i==0 ale vaše makro my_sizeof by se zhroutil s dělením nulou). Viz také pokyny pro kódování C a wikipedii.
Měli byste rozumět aritmetice ukazatele C. Viz např. tato otázka. Rozdíl ukazatelů je vyjádřen v prvcích, nikoli v bajtech.
 Výsledek odečítání ukazatele je v prvcích a ne v bajtech. První výraz se tedy vyhodnotí jako 1 podle definice.
Kromě toho byste skutečně měli v makrech používat závorky:
#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)
 
 Jinak pokus o použití my_sizeof() ve výrazu může vést k chybám.