Interesujący punkt natknąłem się dzisiaj na recenzję Code Review . @ Veedrac zalecił w tej odpowiedzi, aby zmienne typy rozmiarów (np. int
I long
) zostały zastąpione stałymi typami rozmiarów, takimi jak uint64_t
i uint32_t
. Cytat z komentarzy do tej odpowiedzi:
Rozmiary int i long (a zatem wartości, które mogą przechowywać) są zależne od platformy. Z drugiej strony int32_t ma zawsze długość 32 bitów. Użycie int oznacza po prostu, że twój kod działa inaczej na różnych platformach, co na ogół nie jest tym, czego chcesz.
Powód, dla którego norma nie określa typowych typów, jest częściowo wyjaśniony tutaj przez @supercat. C został napisany jako przenośny w różnych architekturach, w przeciwieństwie do asemblera, który zwykle był używany do programowania systemów w tym czasie.
Myślę, że pierwotnie zamierzeniem projektu było, aby każdy typ inny niż int był najmniejszą rzeczą, która mogła poradzić sobie z liczbami o różnych rozmiarach, i że był to najbardziej praktyczny rozmiar „ogólnego zastosowania”, który mógłby obsłużyć +/- 32767.
Co do mnie, zawsze korzystałem int
i nie martwiłem się o alternatywy. Zawsze uważałem, że jest to najbardziej typ z najlepszą wydajnością, koniec historii. Jedynym miejscem, które moim zdaniem przydałaby się stała szerokość, byłoby przydatne do kodowania danych w celu przechowywania lub przesyłania przez sieć. Rzadko też widziałem typy o stałej szerokości w kodzie napisanym przez innych.
Czy utknąłem w latach 70., czy jest uzasadnienie dla zastosowania int
w erze C99 i później?