A menudo veo código fuente usando tipos como uint32, uint64 y me pregunto si el programador debería definirlos en el código de la aplicación o si están definidos en un encabezado lib estándar.
¿Cuál es la mejor manera de tener estos tipos en el código fuente de mi aplicación?
int_leastNN_t
yuint_leastNN_t
paraNN
8, 16, 32 y 64 siempre deben existir . C99 no permite implementaciones sin un tipo entero de al menos 64 bits, ya quelong long
se requiere que sea al menos así de grande.stdint.h
requiere todos.typedef uint32_t Uint32;
en include / SDL_stdinc.h (si es usuario de SDL)Todos esos tipos de enteros están definidos en
stdint.h
fuente
stdint.h
implementación específica? Vea también esta pregunta y esta preguntastdint.h
si respetas el estándar C99.stdint.h
. Esto devuelve 0 hits:grep uint32 /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h | grep -v uint32_t
.#include "stdint-gcc.h"
, y grepping ese archivo produce las definiciones._t
sufijo, como se enumera en la respuesta anterior.Si está utilizando C99 solo incluya
stdint.h
. Por cierto, los tipos de 64 bits están ahí si el procesador los admite.fuente
uint128_t
if__SIZEOF_INT128__
definido como 16 o mayor (GCC y compatibles). Está disponible en máquinas x86_64 / amd64, pero el procesador no lo admite de forma nativa. Solo los Cray tienen ese tamaño de registro, IIRC.El interrogador en realidad preguntó sobre int16 (etc.) en lugar de (feo) int16_t (etc.).
No hay encabezados estándar, ni ninguno en la carpeta / usr / include / de Linux que los defina sin "_t".
fuente