c gcc uint

Diferencia entre uint y unsigned int?



gcc (5)

Algunos sistemas pueden definir uint como typedef.

typedef unsigned int uint;

Para estos sistemas son lo mismo. Pero uint no es un tipo estándar, por lo que cada sistema puede no ser compatible y, por lo tanto, no es portátil.

¿Hay alguna diferencia entre uint y unsigned int ? Estoy buscando en el sitio, pero todas las preguntas se refieren a C # o C ++. Me gustaría una respuesta sobre C.

Tenga en cuenta que estoy usando GCC en Linux.


El unsigned int es un tipo integrado (estándar) por lo que si desea que su proyecto sea multiplataforma, siempre use unsigned int ya que se garantiza que todos los compiladores lo admiten (de ahí que sea el estándar ).


Todas las respuestas aquí no mencionan la verdadera razón de uint .
Obviamente es un tipo de unsigned int , pero eso no explica su utilidad.

La verdadera pregunta es,

¿Por qué alguien querría escribir un tipo fundamental en una versión abreviada?

Para ahorrar en tipeo?
No, lo hicieron por necesidad.

Considera el lenguaje C; un lenguaje que no tiene plantillas.
¿Cómo vas a sacrificar tu propio vector que puede contener cualquier tipo?

Podrías hacer algo con punteros vacíos,
pero una emulación más cercana de plantillas te haría recurrir a macros.

Entonces definirías tu vector de plantilla:

#define define_vector(type) / typedef struct vector_##type { / impl / };

Declara tus tipos:

define_vector(int) define_vector(float) define_vector(unsigned int)

Y después de la generación, date cuenta de que los tipos deben ser una sola ficha:

typedef struct vector_int { impl }; typedef struct vector_float { impl }; typedef struct vector_unsigned int { impl };


uint no es un tipo estándar - unsigned int is.


Estoy ampliando un poco las respuestas de Erik, Teoman Soygul y taskinoor

uint no es un estándar.

Por lo tanto, se desaconseja usar su propia taquigrafía de esta manera:

typedef unsigned int uint;

Si busca la especificidad de la plataforma en su lugar (por ejemplo, necesita especificar el número de bits que ocupa su int), incluido stdint.h :

#include <stdint.h>

expondrá las siguientes categorías estándar de enteros:

  • Tipos enteros que tienen ciertos anchos exactos

  • Tipos enteros que tienen al menos ciertos anchos especificados

  • Los tipos de enteros más rápidos que tienen al menos ciertos anchos especificados

  • Tipos enteros lo suficientemente amplios como para contener punteros a los objetos

  • Tipos enteros con mayor ancho

Por ejemplo,

Tipos enteros de ancho exacto

El nombre typedef int N _t designa un tipo entero con signo con ancho N, sin bits de relleno y una representación de complemento de dos. Por lo tanto, int8_t denota un tipo entero con signo con un ancho de exactamente 8 bits.

El nombre typedef uint N _t designa un tipo entero sin signo con ancho N. Por lo tanto, uint24_t denota un tipo entero sin signo con un ancho de exactamente 24 bits.

define

int8_t int16_t int32_t uint8_t uint16_t uint32_t