K této odpovědi přidám svých 10 centů:
u64
znamená hodnotu 'unsigned 64 bits', takže v závislosti na architektuře, kde kód poběží/bude zkompilován, musí být definován odlišně, aby byl skutečně dlouhý 64 bitů.
Například na počítači x86 unsigned long
je dlouhý 64 bitů, takže u64
pro tento stroj lze definovat takto:
typedef unsigned long u64;
Totéž platí pro u32
. Na počítači x86 unsigned int
je dlouhý 32 bitů, takže u32
pro tento stroj lze definovat takto:
typedef unsigned int u32;
Obecně najdete typedef
deklarace pro tyto typy na types.h
soubor, který odpovídá architektuře, do které zdroj kompilujete.
Často, když pracujete blízko hardwaru nebo když se snažíte řídit velikost/formát datové struktury, potřebujete mít přesnou kontrolu nad velikostí vašich celých čísel.
Pokud jde o u8
vs uint8_t
, je to jednoduše proto, že Linux předcházel <stdint.h>
je k dispozici v C, což je technicky C99-ismus, ale podle mých zkušeností je k dispozici na většině moderních kompilátorů dokonce i v jejich režimech ANSI-C / C89.