Pomiędzy int32
a int32_t
(i podobnie między int8
i int8_t
) różnica jest dość prosta: standard C definiuje int8_t
i int32_t
, ale nie definiuje niczego nazwanego int8
lub int32
- to drugie (jeśli w ogóle istnieją) pochodzi prawdopodobnie z innego nagłówka lub biblioteki (najprawdopodobniej poprzedza dodanie int8_t
i int32_t
w C99).
Zwykły int
różni się nieco od pozostałych. Gdzie int8_t
i int32_t
każdy ma określony rozmiar, int
może mieć dowolny rozmiar> = 16 bitów. W różnych czasach zarówno 16 bitów, jak i 32 bity były dość powszechne (aw przypadku implementacji 64-bitowej powinno to być prawdopodobnie 64 bity).
Z drugiej strony int
gwarantuje się obecność w każdej implementacji języka C, gdzie int8_t
i int32_t
nie ma. Prawdopodobnie pozostaje pytanie, czy to ma dla Ciebie znaczenie. Jeśli używasz C na małych systemach wbudowanych i / lub starszych kompilatorach, może to być problem. Jeśli używasz go głównie z nowoczesnym kompilatorem na komputerach stacjonarnych / serwerach, prawdopodobnie nie będzie.
Ups - przegapiłem część dotyczącą char
. Używałbyś int8_t
zamiast znaku char, jeśli (i tylko wtedy) chcesz, aby typ liczby całkowitej gwarantowany miał dokładnie 8 bitów. Jeśli chcesz przechowywać znaki, prawdopodobnie będziesz chciał użyć char
zamiast tego. Jego rozmiar może się różnić (pod względem liczby bitów), ale gwarantuje, że będzie to dokładnie jeden bajt. Jedna drobna dziwność: nie ma gwarancji, czy zwykły char
jest podpisany, czy nie (a wiele kompilatorów może to zrobić, w zależności od flagi czasu kompilacji). Jeśli chcesz upewnić się, że jest podpisany lub niepodpisany, musisz to wyraźnie określić.
bool_t
- nigdy wcześniej o tym nie słyszałem. Standard C definiuje_Bool
jako typ wbudowany.bool
jest definiowany tylko wtedy, gdy ty#include <stdbool.h>
(jako makro, które rozwija się do_Bool
).Typy danych _t to typedef w nagłówku stdint.h, podczas gdy int to wbudowany podstawowy typ danych. Dzięki temu _t będzie dostępne tylko wtedy, gdy istnieje stdint.h. int z drugiej strony jest gwarantowane.
źródło
Zawsze pamiętaj, że „rozmiar” jest zmienny, jeśli nie zostanie wyraźnie określony, więc jeśli deklarujesz
W niektórych systemach może to dać 16-bitową liczbę całkowitą przez kompilator, a na innych może dać 32-bitową liczbę całkowitą (lub 64-bitową liczbę całkowitą w nowszych systemach).
W środowiskach osadzonych może to skończyć się dziwnymi wynikami (szczególnie podczas obsługi operacji we / wy mapowanych w pamięci lub może być rozważane jako prosta sytuacja tablicowa), dlatego zdecydowanie zaleca się określenie zmiennych o stałym rozmiarze. W starszych systemach możesz się spotkać
Począwszy od C99, projektanci dodali plik nagłówkowy stdint.h, który zasadniczo wykorzystuje podobne typy plików.
W systemie Windows wpisy w pliku nagłówkowym stdin.h mogą być widoczne jako
Jest coś więcej, jak liczby całkowite o minimalnej szerokości lub typy całkowitoliczbowe o dokładnej szerokości, myślę, że nie jest źle zbadać stdint.h dla lepszego zrozumienia.
źródło
typedef short INT16;
nietypedefs short INT16
.