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.