J'ajoute mes 10 centimes à cette réponse :
u64
signifie une valeur '64 bits non signés', donc, selon l'architecture où le code sera exécuté/compilé, il doit être défini différemment afin d'avoir une longueur réelle de 64 bits.
Par exemple, sur une machine x86, un unsigned long
est long de 64 bits, donc u64
pour cette machine pourrait être défini comme suit :
typedef unsigned long u64;
Il en va de même pour u32
. Sur une machine x86, unsigned int
est long de 32 bits, donc u32
pour cette machine pourrait être défini comme suit :
typedef unsigned int u32;
Vous trouverez généralement le typedef
déclaration pour ces types sur un types.h
qui correspond à l'architecture vers laquelle vous compilez votre source.
Souvent, lorsque vous travaillez à proximité du matériel ou lorsque vous essayez de contrôler la taille/le format d'une structure de données, vous devez avoir un contrôle précis de la taille de vos entiers.
Comme pour u8
contre uint8_t
, c'est simplement parce que Linux est antérieur à <stdint.h>
étant disponible en C, qui est techniquement un C99-ism, mais d'après mon expérience, il est disponible sur la plupart des compilateurs modernes, même dans leurs modes ANSI-C / C89.