Je vois souvent du code source utiliser des types comme uint32, uint64 et je me demande s'ils devraient être définis par le programmeur dans le code de l'application ou s'ils sont définis dans un en-tête de lib standard.
Quelle est la meilleure façon d'avoir ces types sur le code source de mon application?
int_leastNN_t
etuint_leastNN_t
pourNN
8, 16, 32 et 64 doivent toujours exister . C99 n'autorise pas les implémentations sans un type entier d'au moins 64 bits, car illong long
doit être au moins aussi grand.stdint.h
requiert tous.typedef uint32_t Uint32;
dans include / SDL_stdinc.h (si vous êtes un utilisateur SDL)Ces types entiers sont tous définis dans
stdint.h
la source
stdint.h
spécifique à la mise en œuvre? Voir aussi cette question et cette questionstdint.h
si vous respectez la norme C99.stdint.h
. Cela renvoie 0 succès:grep uint32 /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h | grep -v uint32_t
.#include "stdint-gcc.h"
, et la greffe de ce fichier donne les définitions._t
suffixe, comme indiqué dans la réponse ci-dessus.Si vous utilisez C99, incluez simplement
stdint.h
. BTW, les types 64 bits sont là si le processeur les prend en charge.la source
uint128_t
if__SIZEOF_INT128__
défini à 16 ou plus (GCC et compatibles). Il est disponible sur les machines x86_64 / amd64, mais le processeur ne le prend pas en charge nativement. Seuls les Cray ont cette taille de registre, IIRC.Le questionneur a en fait posé des questions sur int16 (etc) plutôt que sur (moche) int16_t (etc).
Il n'y a pas d'en-tête standard - ni aucun dans le dossier / usr / include / de Linux qui les définit sans le "_t".
la source