2012-12-11 8 views
14

Powiel możliwe:
Why does glib redefine types?Dlaczego lepiej jest używać typów danych Glib (np. `Gint` zamiast` int`)?

W + 2,0 tutorialu GTK, mogę czytać here następujące oświadczenie o typach danych:

Istnieje kilka rzeczy, które prawdopodobnie zauważyłem w poprzednich przykładach, które wymagają wyjaśnienia. Widoki gint, gchar, itp. Są typami odpowiednio do int i char, które są częścią systemu GLib. Robi się to, aby ominąć tę paskudną zależność od rozmiaru prostych typów danych podczas wykonywania obliczeń.

Nie rozumiem ostatniej części tego wyjaśnienia. Dlaczego lepiej jest używać typów danych Glib?

Odpowiedz

9

Jak wspomina samouczek, ma to zapewnić przenośność. Podczas budowania kodu korzystającego z glib w nowym systemie wystarczy zmodyfikować plik nagłówkowy tylko typedefs, a nie kod, który używa tych typów.

Standard C99 dodał typy o stałej szerokości (int8_t, uint32_t, itp.), Które sprawiałyby, że glib przestałby być typowy, ale glib poprzedza standard C99, co prawdopodobnie jest powodem, dla którego ma własny zestaw typów.

+2

Oto co mam rozumieć ... gint i gchar na przykład są po prostu bezużyteczne dla przenośności. Tylko gint32 i wszystkie typy danych o stałych rozmiarach dodane przez Glib były interesujące przed standardem C99, ponieważ zapewniają, że zmienne mają minimalną wymaganą wielkość. Czy mam rację ? – remjg

+0

Możesz mieć rację. Chociaż możliwe jest, że ludzie polegali na np. gint mieć określony rozmiar, lub przynajmniej 32 bity lub coś podobnego. Chodzi o to, że łatwiej jest zmienić pojedynczy typedef, aby spełnić takie wymagania, zamiast zmieniać każde miejsce w kodzie, w którym używasz ints. – Michael

+0

Masz rację, 'gint' i' gchar' nie są zdefiniowane jako określone rozmiary, więc nie ma powodu, aby z nich korzystać. Zobacz także komentarz: http://stackoverflow.com/questions/2800310/converting-an-array-of-characters-to-a-const-gchar/2800318#2800318 – ptomato

3

typów C danych są bardzo platformy i specyficzne np Int wykonania jest wielkość rejestru karbonizacie nie tyle bitów jako bajt, oznacza długo tylko nie mniejszej niż int krótki int jest co najmniej 2 bajtów, ale nie musi być mniejszy niż int

Wykorzystanie krótkich poprawnie nazwanych zmiennych jest korzystne dla przenośności.

A 2.0 poradniku GTK mówi:

Dobrym przykładem jest „gint32”, który będzie typedef'd do 32 bitową liczbą całkowitą każdej platformy, czy jest 64 nieco alfa lub 32-bitowy i386. Typy są bardzo proste i intuicyjne. Wszystkie są zdefiniowane w glib/glib.h (która jest dołączana z gtk.h).

edit: Jak powiedział Michael średnia C99 sprawia, że ​​są przestarzałe, dostarczając nowych rodzajów

Powiązane problemy