Nejnovější verzi knihovny GLib si můžete stáhnout na ftp.gtk.org/pub/gtk/v1.2/. Solidní anglická dokumentace je k dispozici na developer.gnome.org/doc/API/glib/.
Knihovnu GLib v žádném případě nezaměňujte s funkcemi definovanými standardním Céčkem (glibc). GLib přináší mnohem složitější a komplexnější funkce, které glibc vhodně doplňují (popřípadě nahrazují).
Kompilace s knihovnou GLib
Každý zdrojový soubor využívající funkce knihovny GLib musí mít, jak je ostatně v jazyku C zvykem, na začátku uveden hlavičkový soubor:
#include <glib.h>
Při kompilaci se používá utilitka glib-config
, která ví vše potřebné, co je třeba zadat kompilátoru, aby našel příslušné hlavičkové soubory a knihovny. Spustíte-li ji s parametrem --cflags
, vypíše argumenty kompilátoru určující umístění hlavičkových souborů; s parametrem --libs
vrátí argumenty, které oznamují kompilátoru umístění knihovny.
Kompilaci modulu využívajícího knihovnu GLib proveďte například takto:
gcc `glib-config --cflags` modul.c -o modul.o
Tím se vytvoří modul modul.o
. Pro slinkování modulů dohromady pak zadejte například:
gcc modul.o modul1.o modul2.o `glib-config --libs` -o program
…čímž se z modulů modul.o, modul1.o
a modul2.o
vytvoří spustitelný soubor program
.
Základní datové typy
Abychom se mohli bavit o zajímavějších funkcích knihovny GLib, musíme nejprve vyjmenovat základní datové typy, se kterými knihovna pracuje.
Nové typy, které nejsou součástí standardního céčka
Sem patří například typ gboolean
, který je sice vnitřně ekvivalentem typu int
, měl by však nabývat pouze hodnot TRUE
(pravda) nebo FALSE
(nepravda). TRUE
a FALSE
jsou makra.
gsize (gssize)
Příklad:
/* test datoveho typu gboolean */
#include <glib.h>
int main(void) { gboolean b; b = (2 < 3); if (b) printf("b je TRUE!\n"); else printf("b je FALSE!\n"); b = FALSE; if (b) printf("b je TRUE!\n"); else printf("b je FALSE!\n"); return(0); }
Integerové typy garantované velikosti
GLib definuje 8, 16, 32 a popř. i 64-bitové celočíselné (integer) typy, u nichž je garantováno, že na všech platformách budou zabírat stejné množství paměti. Řeší se tím problém různých délek typu int
na různých platformách. Použitím proměnných těchto garantovaných typů budete mít jistotu, že na všech systémech, ve kterých program běží, mají stejnou velikost.
typ | popis | přípustné hodnoty |
gint8 |
8-bitový signed integer | –128 … 127 |
guint8 |
8-bitový unsigned integer | 0 … 255 |
gint16 |
16-bitový signed integer | –32 768 … 32 767 |
guint16 |
16-bitový unsigned integer | 0 … 65 535 |
gint32 |
32-bitový signed integer | –2 147 483 648 … 2 147 483 647 |
guint32 |
32-bitový unsigned integer | 0 … 4 294 967 295 |
gint64 |
64-bitový signed integer | –9 223 372 036 854 775 808 … 9 223 372 036 854 775 807 |
guint64 |
64-bitový unsigned integer | 0 … 18 446 744 073 709 551 615 |
U posledních dvou jmenovaných ( gint64
a guint64
) je však malý problém. To, jestli jsou k dispozici, udává makro G_HAVE_GINT64
. Jestli je G_HAVE_GINT64
definováno, můžete 64-bitové integery použít, jinak ne. K zapsání 64-bitových konstant (k naplnění 64-bitové proměnné hodnotou) ve zdrojácích je vhodné použít makro G_GINT64_CONSTANT(value)
.
Příklad:
/* test datovych typu garantovane velikosti */
#include <glib.h>
int main(void) { gint64 x; guint32 y; gint8 z; #ifdef G_HAVE_GINT64 x = G_GINT64_CONSTANT(0x1d636b02300a7aa7); printf("64-bitovy integer je podporovan: x = %Lx\n", x); #else printf("64-bitovy integer NENI podporovan touto platformou!\n"); #endif printf("x: %d, y: %d, z: %d\n", sizeof(x)*8, sizeof(y)*8, sizeof(z)*8); return(0); }
Typy definované pro snazší použití
GLib definuje některé datové typy jako ekvivalenty typů ze standardního Céčka proto, aby jim dala kratší názvy:
typ | popis |
gpointer |
pointer na void |
gconstpointer |
konstantní pointer na void (používá se ve funkčních prototypech k označení, že data nebudou ve funkci měněna) |
guchar |
totéž co unsigned char |
guint |
totéž co unsigned int |
gushort |
totéž co unsigned short |
gulong |
totéž co unsigned long |
Ekvivalenty typů jazyka C
Následující typy jsou ekvivalentními s typy, jaké definuje standardní jazyk C. Do GLib jsou vloženy pouze pro úplnost:
typ | popis |
gchar |
totéž co char |
gint |
totéž co int |
gshort |
totéž co short |
glong |
totéž co long |
gfloat |
totéž co float |
gdouble |
totéž co double |
Limity základních datových typů
Limity základních datových typů, tj. maximální a minimální hodnotu, které do nich lze uložit, jsou definovány pomocí maker. Všechny shrnuje následující tabulka:
typ | minimum | maximum |
gint |
G_MININT |
G_MAXINT |
gshort |
G_MINSHORT |
G_MAXSHORT |
glong |
G_MINLONG |
G_MAXLONG |
gfloat |
G_MINFLOAT |
G_MAXFLOAT |
gdouble |
G_MINDOUBLE |
G_MAXDOUBLE |
Jak jste si asi všimli, všechno, co pochází z knihovny GLib, začíná písmenem g
. Je to zvyk, který se důsledně dodržuje.
Asi nejnezáživnější část máme nyní úspěšně za sebou. Příště se podíváme na práci s řetězci.