r21-06.doc

65
Rozdział 21. Co dalej Gratulacje! Przebrnąłeś już prawie przez całe wprowadzenie do C++. W tym momencie powinieneś już dobrze go rozumieć, ale w nowoczesnym programowaniu zawsze jest coś, czego jeszcze można się nauczyć. W tym rozdziale uzupełnimy brakujące szczegóły i wskażemy ci dalsze kierunki rozwoju. Większość kodu, który zapisuje się w plikach kodu źródłowego, to C++. Ten kod jest interpretowany przez kompilator i zamieniany w program. Jednak przed uruchomieniem kompilatora zostaje uruchomiony preprocesor, który umożliwia kompilację warunkową. Z tego rozdziału dowiesz się: czym jest kompilacja warunkowa i jak nią zarządzać, jak pisać makra preprocesora, jak używać preprocesora do wyszukiwania błędów, jak manipulować poszczególnymi bitami i używać ich jako znaczników, jakie są następne kroki w efektywnej nauce C++.

Upload: greg

Post on 14-Sep-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Szablon dla tlumaczy

2

Cz I ( Podstawy obsugi systemu WhizBang (Nagwek strony)

Rozdzia 21.Co dalej

Gratulacje! Przebrne ju prawie przez cae wprowadzenie do C++. W tym momencie powiniene ju dobrze go rozumie, ale w nowoczesnym programowaniu zawsze jest co, czego jeszcze mona si nauczy. W tym rozdziale uzupenimy brakujce szczegy i wskaemy ci dalsze kierunki rozwoju.

Wikszo kodu, ktry zapisuje si w plikach kodu rdowego, to C++. Ten kod jest interpretowany przez kompilator i zamieniany w program. Jednak przed uruchomieniem kompilatora zostaje uruchomiony preprocesor, ktry umoliwia kompilacj warunkow.

Z tego rozdziau dowiesz si:

czym jest kompilacja warunkowa i jak ni zarzdza,

jak pisa makra preprocesora,

jak uywa preprocesora do wyszukiwania bdw,

jak manipulowa poszczeglnymi bitami i uywa ich jako znacznikw,

jakie s nastpne kroki w efektywnej nauce C++.

Preprocesor i kompilator

Za kadym razem, gdy uruchamiasz kompilator, jako pierwszy rusza preprocesor. Preprocesor szuka swoich dyrektyw, z ktrych kada zaczyna si od znaku hash (#). Efektem dziaania kadej z takich instrukcji jest zmiana tekstu kodu rdowego. Rezultatem tej zmiany jest nowy plik kodu rdowego tymczasowy plik, ktrego zwykle nie widzisz, cho moesz poinstruowa kompilator, aby zapisa go tak, aby mg go przeanalizowa.

Kompilator nie odczytuje oryginalnego pliku kodu rdowego; zamiast tego odczytuje i kompiluje plik bdcy wynikiem pracy preprocesora. Wykorzystywalimy ten mechanizm ju wczeniej, doczajc pliki nagwkowe za pomoc dyrektywy #include. Ta dyrektywa powoduje odszukanie pliku o wskazanej w instrukcji nazwie i doczenie go w biecym miejscu do pliku poredniego. Odpowiada to wpisaniu caego pliku nagwkowego do kodu rdowego; w momencie, gdy plik trafia do kompilatora, plik nagwkowy ju znajduje si w kodzie.

Przegldanie formy poredniej

Prawie kady kompilator posiada przecznik powodujcy zapisanie pliku poredniego na dysku; przecznik ten mona ustawia albo w zintegrowanym rodowisku programistycznym (IDE) albo w linii polece kompilatora. Jeli chcesz przejrze plik poredni, poszukaj odpowiedniego przecznika w podrczniku dla swojego kompilatora.

Uycie dyrektywy #define

Dyrektywa #define definiuje podstawienie symbolu. Jeli napiszemy:

#define BIG 512

to poinstruujemy preprocesor, by podstawi acuch 512 w kade miejsce, w ktrym napotka symbol BIG. Nie jest to jednak acuch w rozumieniu C++. Znaki 512 s wstawiane do kodu rdowego w kadym miejscu, w ktrym zostanie napotkany symbol BIG. Symbol jest acuchem znakw, ktry moe by uyty tam, gdzie moe by uyty acuch, staa lub inny spjny zestaw znakw. Tak wic, jeli napiszemy:

#define BIG 512

int myArray[BIG];

wtedy stworzony przez preprocesor plik poredni bdzie wyglda nastpujco:

int myArray[512];

Zwr uwag na brak instrukcji #define. Instrukcje preprocesora s usuwane z pliku poredniego i w ogle nie wystpuj w ostatecznym kodzie rdowym.

Uycie #define dla staych

Jednym z zada dyrektywy #define jest podstawianie staych. Jednak nie naley jej w tym celu wykorzystywa, gdy dyrektyw ta jedynie podstawia acuch i nie dokonuje sprawdzenia typu. Jak wyjaniono w podrozdziale dotyczcym staych, uycie sowa kluczowego const ma o wiele wicej zalet ni uycie dyrektywy #define.

Uycie #define do definiowania symboli

Drugim zastosowaniem #define jest po prostu definiowanie okrelonych symboli. W zwizku z tym moemy napisa:

#define BIG

Pniej moemy sprawdzi, czy symbol BIG zosta zdefiniowany i jeli tak, podj odpowiednie dziaania. Dyrektywami preprocesora, ktre sprawdzaj, czy symbol zosta zdefiniowany, s dyrektywy #ifdef (if defined, jeli zdefiniowany) oraz #ifndef (if not defined, jeli nie zdefiniowany). Po obu z nich musi wystpi dyrektywa #endif, koczca blok kompilowany warunkowo.

Dyrektywa #ifdef jest prawdziwa, jeli sprawdzany w niej symbol jest ju zdefiniowany. Moemy wic napisa:

#ifdef DEBUG

cout