« Inicjalizacja i obsługa błędów, lekcja »
(lekcja)
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!
Autor: Michał Kozakiewicz (michal3)
Kurs Allegro 5.x, C++

Inicjalizacja i obsługa błędów

[lekcja]

Omówienie

Przed napisaniem pierwszego programu z użyciem biblioteki Allegro 5, należy wspomnieć o inicjalizacji oraz obsłudze błędów. Wiedza na ten temat jest elementarna.

Inicjalizacja

Ponieważ samo dodanie nagłówka biblioteki Allegro 5 nie uruchomi jej, należy wywołać specjalną funkcję która zainicjalizuje bibliotekę. Dopiero po zainicjalizowaniu biblioteki, możemy korzystać z niej w prawidłowy sposób.
Niestety to nie wszystko.
Przykładowo gdybyś chciał w swoim programie obsłużyć klawiaturę, musisz wywołać również specjalną funkcje która spowoduje aktywowanie jej dla biblioteki. Sprawa ta ma się również z obsługą myszy, dotyku, dodatków i innych elementów. Funkcje taką należy wywołać tylko raz w programie, w miejscu gdzie zaczynasz potrzebować użyć danej rzeczy.

Skąd wiedzieć co trzeba inicjalizować i gdzie tego szukać? Odpowiedź jest prosta, w oficjalnej dokumentacji na stronie biblioteki Allegro. Jeżeli zajrzysz do poszczególnych sekcji biblioteki możesz znaleźć te funkcje. Dodatkowo dostajesz do nich opis, jak należy z nimi postępować.

Przestawię dwa poniżej.

bool al_init( void )
Powyższe makro powstało z funkcji
al_install_system()
. Makro te stosujemy aby zainicjalizować bibliotekę Allegro 5. Jeżeli wszystko powiedzie się prawidłowo i biblioteka zostanie zainicjalizowana, makro zwróci wartość true czyli 1. W innym przypadku zostaje zwrócona wartość false czyli 0. Wartość false oznacza dla nas nie tyle co niepowodzenie, ale informacje że coś stoi na przeszkodzie do prawidłowego działania biblioteki. Dla tego makra w większości przypadków gdy zwracana jest wartość false, oznacza błędy w wersji dołączonych bibliotek do programu wynikowego. Przykładowo kompilujesz program na najnowszą wersję Allegro 5, lecz pliki biblioteczne .dll/.so masz w starej wersji, parę numerów niższej.

bool al_install_keyboard( void )
Powyższa funkcja aktywuje sterownik obsługi klawiatury. Jeżeli instalowanie przebiegnie prawidłowo zwrócona zostanie wartość true. W wypadku ponownego instalowania, zostanie zwrócona wartość true oraz nic nie zostanie wykonane. W przypadku niepowodzenia zostanie zwrócona inna wartość niż true.

Obsługa błędów

Jak się zapewne domyślasz w trakcie niepowodzenia zainicjalizowania pewnego modułu Allegro, czy samej biblioteki. Należy wypisać komunikat dla użytkownika lub całkowicie zamknąć program. Wykonuję się to właśnie przez obsłużenie błędów. Czynność jest bardzo prosta, sprowadza się do sprawdzenia wyniku funkcji inicjalizującej i w określonym wypadku wykonaniu akcji.

Przykład obsługi błędu makra
bool al_init( void )
.

C/C++
/* Inicjalizacja biblioteki Allegro 5 */
if( !al_init() )
{
    fprintf( stderr, "Failed to initialize Allegro5 library.\n" );
    return EXIT_FAILURE;
}

Przeanalizujmy powyższy kod. W przypadku powodzenia zostanie zainicjalizowana biblioteka Allegro i program przejdzie dalej. W przypadku niepowodzenia, makro zwróci wartość false które zostanie zanegowane i zostanie wykonana zawartość bloku instrukcji if. Nastąpi wypisanie komunikatu o błędzie na standardowe wyjście błędów, a następnie nagłe wyłączenie programu.

Deinicjalizacja

W przypadku gdy przestajesz potrzebować już pewnego modułu biblioteki lub jej całej. Jeżeli inicjalizowałeś należy deinicjalizować.
Przykładowo należy użyć funkcji deinicjalizujacej, jeżeli skończyłeś wyświetlać grafikę na ekranie a dalszą część programu wykonujesz przez konsole. Rozumiejąc przez to że nie będziesz przez dalszy czas prezentować grafiki, lub do ponownej inicjalizacji.
Ważne to jest ponieważ deinicjalizacja zwalnia pamięć lub jej część używaną przez bibliotekę Allegro. Oczywiste jest przez to, że pamieć może zostać użyta do innych celów. Sprawa tak samo się miewa gdy przestajesz używać klawiatury, a dalszą część będziesz obsługiwać np. panelem dotykowym.
Wykonywać tego nie trzeba w jednym przypadku, na samym końcu programu. Nie trzeba ale to nie oznacza żeby tego nie robić, dla prawidłowego programu oraz konwencji polecam stosować deinicjalizacje na końcu.
Poprzedni dokumentNastępny dokument
PodstawyPierwsze okno