Często widzę kod źródłowy używający typów takich jak uint32, uint64 i zastanawiam się, czy powinny być zdefiniowane przez programistę w kodzie aplikacji, czy też są zdefiniowane w standardowym nagłówku lib.
Jaki jest najlepszy sposób na umieszczenie tych typów w kodzie źródłowym aplikacji?
int_leastNN_t
iuint_leastNN_t
dlaNN
8, 16, 32 i 64 muszą zawsze istnieć . C99 nie pozwala na implementacje bez liczby całkowitej o rozmiarze co najmniej 64 bitów, ponieważlong long
musi być co najmniej tak duża.stdint.h
wymaga ich wszystkich.typedef uint32_t Uint32;
w include / SDL_stdinc.h (jeśli jesteś użytkownikiem SDL)Wszystkie te typy liczb całkowitych są zdefiniowane w programie
stdint.h
źródło
stdint.h
wdrożeniem? Zobacz także to pytanie i to pytaniestdint.h
jeśli przestrzegasz standardu C99.stdint.h
. To zwraca 0 trafień:grep uint32 /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdint.h | grep -v uint32_t
.#include "stdint-gcc.h"
, a grepowanie tego pliku daje definicje._t
przyrostkiem, wymienione w odpowiedzi powyżej.Jeśli używasz C99, po prostu dołącz
stdint.h
. Przy okazji, typy 64-bitowe są dostępne, jeśli procesor je obsługuje.źródło
uint128_t
jeśli__SIZEOF_INT128__
jest zdefiniowane na 16 lub więcej (GCC i zgodne). Jest dostępny na maszynach x86_64 / amd64, ale procesor nie obsługuje go natywnie. Tylko Cray's mają ten rozmiar rejestru, IIRC.Pytający właściwie zapytał o int16 (itp.), A nie (brzydki) int16_t (itp.).
Nie ma standardowych nagłówków - ani żadnego w folderze / usr / include / Linuxa, które definiują je bez „_t”.
źródło