GNU/Linux >> Znalost Linux >  >> Linux

implementace sizeof operátora

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.


Linux
  1. Bash skriptování:Přesun z operátoru backtick do závorek $

  2. Implementace Mdadm Raid s Gpt Partitioning?

  3. -eq:Očekává se unární operátor?

  1. 7 Linux Grep OR, Grep AND, Grep NOT Příklady operátorů

  2. Realizace více potrubí v C

  3. Implementace podmínkových proměnných

  1. Implementace vzduchové mezery pro použití na osobním počítači

  2. Jaká je nejmenší možná implementace Linuxu?

  3. GZip nevytváří stejný komprimovaný výsledek na macOS vs Linux