2012-08-02 27 views
20

Me preguntaba ¿cuál es la diferencia entre uint32_t y uint32, y cuando miré en los ficheros de cabecera que tenía esto:diferencia entre los diferentes tipos de enteros

types.h: 

    /** @brief 32-bit unsigned integer. */ 
    typedef unsigned int uint32; 
stdint.h: 

    typedef unsigned uint32_t; 

esto sólo conduce a más preguntas: ¿Cuál es el diferencia entre

unsigned varName; 

y

unsigned int varName; 

?

estoy usando MinGW.

+8

Son lo mismo. Sin embargo, el estándar C99 no define el tipo 'uint32' (y el encabezado' 'o el archivo' "types.h" '). Si desea usar uno de esos tipos, use 'uint32_t' e incluya el encabezado' '. También 'unsigned' y' unsigned int' son lo mismo. – pmg

+1

Entonces uint32 y no son parte del estándar, pero uint32_t es? – user1507133

+2

@ user1507133: Sí. Básicamente, no existe tal cosa como 'uint32' ni en C ni en C++. – AnT

Respuesta

19

unsigned y unsigned int son sinónimos, al igual que [unsigned] short [int] y [unsigned] long [int].

uint32_t es un tipo que está (opcionalmente) definido por el estándar C. uint32 es solo un nombre que usted inventó, aunque se define como lo mismo.

+8

Un poco de nigromancia aquí, pero comparar 'unsigned [int]' con '[unsigned] (short | long) [int]' puede dar a los nuevos programadores la falsa impresión de que 'short' y' long' no están firmados por defecto. Sugeriría 'unsigned (short | long) [int]' en su lugar. – bcrist

2

no hay absolutamente ninguna diferencia entre unsigned y unsigned int.

Sin embargo, si ese tipo es una buena coincidencia para uint32_t depende de la implementación; un int podría ser "más corto" que 32 bits.

5

No hay diferencia.

unsigned int = uint32 = uint32_t = unsigned en su caso y siempre unsigned int = unsigned

+2

'unsigned int' ==' unsigned', pero de ninguna manera se garantiza que 'uint32_t' ==' unsigned int'. 'unsigned int' puede tener cualquier ancho de bit de 16 bits en adelante. – AnT

+0

En un entorno * con esos typedefs particulares *, 'uint32_t' es por definición' unsigned int'. –

+3

@AndreyT: es por eso que escribí "en su caso" – RiaD

1

unsigned y unsigned int son sinónimos por razones históricas; ambos significan "entero sin signo del tamaño más natural para la arquitectura/plataforma de la CPU", que a menudo (pero de ninguna manera siempre) es de 32 bits en las plataformas modernas.

<stdint.h> es un encabezado estándar en C99 que se supone que da definiciones de tipo para enteros de tamaños particulares, con la convención de nomenclatura uint32_t.

El <types.h> que parece que no es estándar y que presuntamente pertenece a algún marco que está utilizando su proyecto. Su typedef uint32 es compatible con uint32_t. Si debe usar uno u otro en su código es una pregunta para su gerente.

+0

" es un encabezado estándar en C99". ¿Qué hay de C++ 98 y C++ 11? – user1507133

+0

'' es, creo, el encabezado estándar de C++ equivalente. –

+1

@ user1507133 - C++ 11 tiene que trae estos tipos al espacio de nombres 'std' (por ejemplo,' std :: uint32_t'). C++ 98 no tiene este encabezado porque es anterior a C99. POSIX proporciona 'inttypes.h' con los mismos tipos si eso es lo suficientemente bueno. – Nemo

Cuestiones relacionadas