Y a-t-il une différence entre uint
et unsigned int
? Je regarde dans le site, mais toutes les questions se réfèrent à C # ou C++. Je voudrais une réponse sur C.
Notez que j'utilise GCC sous Linux.
uint
n'est pas un type standard - unsigned int
est.
Certains systèmes peuvent définir uint comme un typedef.
typedef unsigned int uint;
Pour ces systèmes, ils sont identiques. Mais uint n'est pas un type standard, donc chaque système peut ne pas le prendre en charge et donc il n'est pas portable.
J'étends un peu les réponses d'Erik, Teoman Soygul et taskinoor
uint n'est pas une norme.
Par conséquent, il est déconseillé d'utiliser votre propre raccourci comme celui-ci:
typedef unsigned int uint;
Si vous recherchez plutôt la spécificité de la plateforme (par exemple, vous devez spécifier le nombre de bits que votre int occupe), y compris stdint.h :
#include <stdint.h>
exposera les catégories standard suivantes d'entiers:
Types entiers ayant certaines largeurs exactes
Types entiers ayant au moins certaines largeurs spécifiées
Types d'entiers les plus rapides ayant au moins certaines largeurs spécifiées
Types entiers suffisamment larges pour contenir des pointeurs sur des objets
Types entiers ayant la plus grande largeur
Par exemple,
Types entiers de largeur exacte
Le nom typedef int N _t désigne un type entier signé avec une largeur N, pas de bits de remplissage et une représentation à deux compléments. Ainsi, int8_t désigne un type entier signé avec une largeur d'exactement 8 bits.
Le nom de typedef uint N _t désigne un type d'entier non signé de largeur N. Ainsi, uint24_t désigne un type d'entier non signé d'une largeur d'exactement 24 bits.
définit
int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
Toutes les réponses ici ne mentionnent pas la vraie raison de uint
.
C'est évidemment un typedef
de unsigned int
, mais cela n'explique pas son utilité.
La vraie question est,
Pourquoi voudrait-on taper un type fondamental dans une version abrégée?
Pour économiser sur la frappe?
Non, ils l'ont fait par nécessité.
Considérez le langage C; une langue qui n'a pas de modèles.
Comment feriez-vous pour éradiquer votre propre vecteur qui peut contenir n'importe quel type?
Vous pourriez faire quelque chose avec des pointeurs vides,
mais une émulation plus proche des modèles vous obligerait à recourir à des macros.
Vous définiriez donc votre vecteur de modèle:
#define define_vector(type) \
typedef struct vector_##type { \
impl \
};
Déclarez vos types:
define_vector(int)
define_vector(float)
define_vector(unsigned int)
Et lors de la génération, réalisez que les types doivent être un seul jeton:
typedef struct vector_int { impl };
typedef struct vector_float { impl };
typedef struct vector_unsigned int { impl };
Le unsigned int
est un type intégré (standard) donc si vous voulez que votre projet soit multi-plateforme, utilisez toujours unsigned int
car il est garanti d'être pris en charge par tous les compilateurs (donc la norme).