C++. Leksykon kieszonkowy

Podobne dokumenty
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Smarty PHP. Leksykon kieszonkowy

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

1 Podstawy c++ w pigułce.

C++. Æwiczenia zaawansowane

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wstęp do programowania. Wykład 1

Podstawy programowania skrót z wykładów:

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Programowanie w języku C++ Grażyna Koba

1 Podstawy c++ w pigułce.

Co nie powinno być umieszczane w plikach nagłówkowych:

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Wykład 8: klasy cz. 4

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Szablony funkcji i klas (templates)

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Wykład 5: Klasy cz. 3

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Podstawy programowania - 1

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Fragment wykładu z języka C ( )

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

zastępować zarezerwowane słowa lub symbole innymi,

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wprowadzenie do języka Java

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

#line #endif #ifndef #pragma

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Utworzenie pliku. Dowiesz się:

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Programowanie strukturalne i obiektowe

Programowanie w Internecie. Java

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

WYKŁAD 1 - KONSPEKT. Program wykładu:

Wstęp do programowania

Podstawy programowania (1)

Wykład 2 Składnia języka C# (cz. 1)

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Podstawy Informatyki Języki programowania c.d.

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Zad. 5: Układ równań liniowych liczb zespolonych

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wstęp do Programowania, laboratorium 02

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

VB. NET. Leksykon kieszonkowy

Spis treści. Wprowadzenie 15

Programowanie obiektowe

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Programowanie obiektowe

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

PARADYGMATY PROGRAMOWANIA Wykład 4

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

KOTLIN. Język programowania dla Androida

Wprowadzenie do biblioteki klas C++

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

TEMAT : KLASY DZIEDZICZENIE

Języki i metodyka programowania. Wprowadzenie do języka C

Programowanie w języku Python. Grażyna Koba

2 Przygotował: mgr inż. Maciej Lasota

Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 1: Wskaźniki i zmienne dynamiczne

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Java jako język programowania

Część 4 życie programu

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

Zofia Kruczkiewicz, ETE8305_2 1

Wykład 9: Polimorfizm i klasy wirtualne

Poprzedni wykład [ ] :

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Transkrypt:

IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK CZYTELNIA SPIS TRECI KATALOG ONLINE DODAJ DO KOSZYKA FRAGMENTY KSI EK ONLINE C++. Leksykon kieszonkowy Autor: Kyle Loudon T³umaczenie: Przemys³aw Steæ ISBN: 83-7361-242-4 Tytu³ orygina³u: C++ Pocket Reference Format: B5, stron: 164 C++ jest z³o onym jêzykiem o wielu subtelnych aspektach. Ksi¹ ka C++. Leksykon kieszonkowy umo liwia programistom C++ szybkie sprawdzenie sposobu u ycia oraz sk³adni najczêciej u ywanych konstrukcji tego jêzyka. Na jej stronach umieszczono mo liwie jak najwiêcej informacji, a jej niewielki rozmiar pozwala mieæ j¹ zawsze przy sobie. C++. Leksykon kieszonkowy opisuje nastêpuj¹ce zagadnienia: Instrukcje jêzyka C++ oraz dyrektywy preprocesora C++ Przestrzenie nazw oraz zakres w C++ Programowanie szablonowe oraz obs³uga wyj¹tków Klasy oraz dziedziczenie Typy jêzyka C++ oraz ich konwersje, w tym rzutowanie typów w C++ Poza spe³nianiem funkcji podrêcznego leksykonu dla programistów C++, ksi¹ ka C++. Leksykon kieszonkowy bêdzie tak e pomocna dla programistów jêzyków Java oraz C, którzy przesiadaj¹ siê na C++ lub tych, którzy w C++ programuj¹ od czasu do czasu. Te trzy jêzyki s¹ czêsto myl¹ce podobne. Ksi¹ ka ta umo liwia programistom zaznajomionym z jêzykiem C lub Java szybkie orientowanie siê w sposobie implementacji w C++. C++. Leksykon kieszonkowy jest jednym z najbardziej zwiêz³ych i podrêcznych opisów jêzyka C++ dostêpnych na rynku. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl

Spis treści Wprowadzenie...7 Konwencje typograficzne...y...8 Podziękowania...y...8 Zgodność z językiem C...y...8 Struktura programu...9 Miejsce rozpoczęcia wykonywania...y...10 Zakończenie wykonywania...y...12 Pliki nagłówkowe...y...12 Pliki źródłowe...y...14 Dyrektywy preprocesora...y...15 Makra preprocesora...y...20 Typy podstawowe...21 bool...y...y...21 char oraz wchar_t...y...22 short, int, long...y...23 float, double, long double...y...26 Typy złożone...27 Wyliczenia...y...28 Tablice...y...y..29 Łańcuchy...y...33 Wskaźniki...y...35 Wskaźniki do składowych...y...38 Referencje...y...39 Typy klasowe...y...40 Konwersje i definicje typów...41 Konwersje typów...y...41 Definicje typów...y...44 Spis treści 3

Elementy leksykalne...44 Komentarze...y...45 Identyfikatory...y...46 Słowa zastrzeżone...y...47 Literały...y...y.47 Operatory...y...48 Wyrażenia...y...63 Zakres...63 Zakres lokalny...y...64 Zakres klasy...y...64 Zakres przestrzeni nazw...y...65 Zakres pliku...y...65 Inne zakresy...y...66 Obejmowanie zakresów...y...66 Deklaracje...67 Deklaracje zmiennych...y...68 Deklaracje funkcji...y...70 Klasy pamięci...y...73 Kwalifikatory...y...75 Instrukcje...78 Instrukcje wyrażeniowe...y...78 Instrukcje puste...y...78 Instrukcje złożone...y...79 Instrukcje iteracyjne...y...80 Instrukcje wyboru...y...82 Instrukcje skoku...y...84 Przestrzenie nazw...87 Deklaracje using...y...88 Dyrektywy using...y...89 Anonimowe przestrzenie nazw...y...90 Klasy, struktury i unie...90 Deklaracje obiektów...y...91 Dostęp do składowych...y...91 Deklaracje danych składowych...y...92 Deklaracje funkcji składowych...y...96 4 C++. Leksykon kieszonkowy

Poziomy dostępu do składowych...y...101 Funkcje i klasy zaprzyjaźnione...y...102 Konstruktory...y...104 Destruktory...y...108 Deklaracje zagnieżdżone...y...109 Deklaracje zapowiadające...y...110 Struktury...y...111 Unie...y...y...111 Dziedziczenie...113 Konstruktory a dziedziczenie...y...114 Destruktory a dziedziczenie...y...116 Wirtualne funkcje składowe...y...117 Abstrakcyjne klasy bazowe...y...120 Poziomy dostępu dla dziedziczenia...y.121 Dziedziczenie wielokrotne...y...122 Wirtualne klasy bazowe...y...124 Szablony...125 Klasy szablonowe...y...125 Funkcje szablonowe...y...129 Przeciążanie...132 Przeciążanie funkcji...y...132 Przeciążanie operatorów...y...134 Zarządzanie pamięcią...137 Przydział pamięci...y...137 Odzyskiwanie pamięci...y...140 Rzutowanie i informacja o typie czasu wykonywania...141 Rzutowanie w stylu języka C...y...141 Rzutowanie w języku C++...y...142 Informacja o typie czasu wykonywania...146 Obsługa wyjątków...147 try...y...y...148 throw...y...y..148 catch...y...y...149 Specyfikacje wyjątków...y...150 Spis treści 5

Biblioteka Standardowa C++...151 Przestrzeń nazw std...y...152 Realizacja Biblioteki Standardowej C...153 Standardowe pliki nagłówkowe C++...153 Strumienie wejściowo-wyjściowe...y...154 Skorowidz...159 6 C++. Leksykon kieszonkowy

C++ Leksykon kieszonkowy Wprowadzenie C++. Leksykon kieszonkowy stanowi skrócony opis języka programowania C++ w postaci zdefiniowanej przez międzynarodowy standard INCITS/ISO/IEC 14882-1998. Książka składa się z krótkich rozdziałów, z których każdy podzielony jest na tematy. Wiele zagadnień zilustrowano precyzyjnymi, kanonicznymi przykładami. C++ jest bardzo obszernym językiem, który trudno opisać w formie leksykonu kieszonkowego. W rezultacie książka ta poświęcona jest niemal wyłącznie prezentacji języka. Dostępne są inne pozycje z serii O'Reilly, które opisują Bibliotekę Standardową C++, będącą samą w sobie obszernym tematem. Biblioteka Standardowa C++ zawiera wszystkie funkcje i możliwości Biblioteki Standardowej C, a także wiele nowych, takich jak Standardowa Biblioteka Szablonów (STL) czy strumienie I/O. Książka napisana została dla czytelników o zróżnicowanym stopniu zaawansowania i doświadczenia w programowaniu w C++. Dla doświadczonych programistów C++ będzie wyjątkowo skondensowanym leksykonem najczęściej wykorzystywanych możliwości języka. Nowicjusze powinni najpierw zapoznać się z jakimś wprowadzeniem do języka, a później wrócić do tego leksykonu, aby poznać określone zagadnienia. Wprowadzenie 7

Konwencje typograficzne W książce stosowane są następujące konwencje typograficyzne: używana do oznaczania przykładowych fragmentów kodu, poleceń, słów kluczowych oraz nazw typów, zmiennych, funkcji i klas. używana do oznaczenia zastępowalnych parametrów. Kursywa używana do nazw plików oraz elementów wyróżnianych w tekście. Podziękowania Podziękowania należą się przede wszystkim Jonathanowi Gennickowi, redaktorowi w wydawnictwie O'Reilly, za wsparcie oraz wskazówki dotyczące tej książki. Dziękuję również yuwe Schnitkerowi, Danny'emu Kalevowi oraz Ronowi Passeriniemu za to, że poświęcili czas na lekturę i poczynili komentarze do wczesnego szkicu książki. Zgodność z językiem C Z pewnymi drobnymi wyjątkami język C++ stworzony został jako rozszerzenie języka C. Oznacza to, że właściwie napisane programy w języku C na ogół skompilują się i będą działać jako programy C++ (większość niezgodności bierze się ze ściślejszej kontroli typów realizowanej w języku C++). Programy w języku C++ wyglądają zazwyczaj podobnie pod względem składniowym do programów w języku C i wykorzystują wiele pierwotnych możliwości i funkcji języka C. 8 C++. Leksykon kieszonkowy

Nie należy jednak dać się zwieść podobieństwom pomiędzy C oraz C++ i uznać, że C++ jest jedynie banalną pochodną jęyzyka C. W rzeczywistości bowiem jest to rozbudowany język, który wzbogaca C o bardzo istotne elementy, a mianowicie o: programowanie obiektowe, programowanie generyczne wykorzystujące szablony, przestrzenie nazw, funkcje typu (czyli wstawiane w miejscu wywołania), przeciążanie operatorów i funkcji, lepsze mechanizmy zarządzania pamięcią, referencje, bezpieczniejsze formy rzutowania, informację o typie czasu wykonywania, obsługę wyjątków, rozszerzoną Bibliotekę Standardową. Struktura programu Na najwyższym poziomie program w języku C++ składa się z jednego lub wielu plików źródłowych zawierających kod źródłowy C++. We wszystkich tych plikach łącznie zdefiniowane jest dokładnie jedno miejsce rozpoczęcia wykonywania programu i być może wiele miejsc jego zakończenia. W plikach źródłowych C++ często importowany jest, czyli dołączany (ang. included), dodatkowy kod źródłowy znajdujący się w tzw. plikach nagłówkowych (ang. header files). Za dołączenie kodu z tych plików przed kompilacją każdego pliku źródłowego Struktura programu 9

odpowiedzialny jest preprocesor języka C++. Jednocześnie preprocesor, poprzez zastosowanie tzw. dyrektyw preprocesora, może wykonać także inne operacje. Plik źródłowy po przetworzeniu przez preprocesor zwany jest jednostką translacji (ang. translation unit). Miejsce rozpoczęcia wykonywania Oznaczonym początkiem programu C++, który programista musi zdefiniować, jest funkcja. W standardowej postaci funkcja ta może nie przyjmować żadnych lub przyjmować dwa argumenty podawane przez system operacyjny przy uruchomieniu programu, chociaż wiele implementacji języka C++ dopuszcza także inne, dodatkowe parametry. Typem zwracanym funkcji jest. Na przykład: Parametr określa liczbę argumentów podanych w wierszu polecenia, a jest tablicą łańcuchów zakończonych znakiem pustym () format języka C zawierającą argumenty w kolejności ich występowania. Nazwa pliku wykonywalnego zapisana jest jako i może być, lecz nie musi, poprzedzona pełną ścieżką. Wartość elementu wynosi 0. Poniższy listing demonstruje kod funkcji prostego programu, który zachęca użytkownika do przeprowadzenia pewnych działań na koncie bankowym: 10 C++. Leksykon kieszonkowy

Struktura programu 11

Klasa reprezentująca konto bankowe zdefiniowana jest w późniejszym przykładzie. Na konto wpłacona zostaje kwota podana w wierszu polecenia przy uruchomieniu programu. Do konwersji argumentu wiersza polecenia z łańcucha na typ służy funkcja (z Biblioteki Standardowej C++). Zakończenie wykonywania Wykonywanie programu w języku C++ kończy się w momenciye opuszczenia funkcji na skutek wykonania instrukcji. Wartość, która zostaje zwrócona, przekazywana jest z powrotem do systemu operacyjnego i staje się wartością zwróconą danego pliku wykonywalnego. Jeśli w treści funkcji nie występuje instrukcja, po wykonaniu wszystkich instrukcji funkcji zwrócona zostaje niejawnie wartość 0. Wykonywanie programu zakończyć można również przez wywołanie funkcji (z Biblioteki Standardowej C++), która jako argument przyjmuje wartość zwracaną pliku wykonywalnego. Pliki nagłówkowe Pliki nagłówkowe zawierają kod źródłowy, który ma zostać dołączony do wielu różnych plików. Posiadają zwykle rozszerzenie.h. W pliku nagłówkowym umieszczamy każdy kod, który ma zostać dołączony w wielu miejscach. Plik nagłówkowy nie powinien nigdy zawierać: definicji zmiennych oraz statycznych danych składowych (różnica pomiędzy deklaracjami a definicjami wyjaśniona jest w części Deklaracje ), 12 C++. Leksykon kieszonkowy

definicji funkcji, za wyjątkiem tych zdefiniowanych jako funkcje szablonowe lub funkcje typu, anonimowych przestrzeni nazw. UWAGA Pliki nagłówkowe w Bibliotece Standardowej C++ nie posiadają rozszerzenia.h nie mają w ogóle rozszerzenia. Często dla każdej ważniejszej klasy, którą definiujemy, tyworzymy jeden plik nagłówkowy. Klasa na przykład zdefiniowana jest w pliku nagłówkowym Account.h, którego zawartość przedstawiono poniżej. Oczywiście pliki nagłówkowe służą także do innych celów, a ponadto nie wszystkie definicje klas muszą zostać umieszczone w pliku nagłówkowym (np. klasy pomocnicze definiowane są po prostu wewnątrz pliku źródłowego, w którym są wykorzystywane). Struktura programu 13

Implementacja tej klasy znajduje się w pliku Account.cpp. Plik nagłówkowy dołączyć można wewnątrz innego pliku za pomocą dyrektywy preprocesora (patrz punkt: Dyrektywy preprocesora ). Ponieważ pliki nagłówkowe dołączane są często przez inne pliki nagłówkowe, trzeba uważać, aby nie dołączyć kilka razy tego samego pliku nagłówkowego, co spowodować może błędy kompilacji. Aby uniknąć takiej sytuacji, treść plików nagłówkowych zwyczajowo umieszcza się wewnątrz dyrektyw preprocesora, oraz, jak zrobiono to w powyższym przykładzie. Taka metoda opakowania pliku nagłówkowego wymusza na preprocesorze konieczność przetestowania identyfikatora. Jeśli identyfikator nie jest zdefiniowany, preprocesor definiuje go i przetwarza zawartość danego pliku. Biorąc pod uwagę omawiany przykład, zawartość pliku Account.h przetwarzana jest tylko wtedy, gdy nie jest zdefiniowany identyfikator, a pierwszą operacją wykonywaną podczas tego przetwarzania jest zdefiniowanie identyfikatora w celu zapewnienia, aby dany plik nagłówkowy nie został dołączony po raz drugi. W celu zagwarantowania niepowtarzalności jako identyfikator używany jest zwykle symbol, gdzie jest nazwą pliku nagłówkowego bez rozszerzenia. Pliki źródłowe Pliki źródłowe C++ posiadają zwykle rozszerzenie.cpp i zawierają kod źródłowy języka C++. Podczas kompilacji kompilator tłumaczy normalnie pliki źródłowe na pliki wynikowe (ang. object files), które często posiadają rozszerzenie.obj lub.o. Konsolidator łączy następnie pliki wynikowe w końcowy plik wykonywalny lub bibliotekę. 14 C++. Leksykon kieszonkowy

Często, choć oczywiście nie zawsze, dla każdej ważniejszej klasy, którą implementujemy, tworzymy jeden plik źródłowy. Na przykład implementacja klasy umieszczona jest w pliku nagłówkowym Account.cpp, którego zawartość przedstawiono poniżej. Pliki źródłowe zawierają często więcej kodu niż tylko implementację pojedynczej klasy. Dyrektywy preprocesora Preprocesor języka C++ wykorzystać można do przeprowadzenia szeregu pożytecznych operacji sterowanych przez kilka dyrektyw. Każda dyrektywa rozpoczyna się od znaku jako pierwszego znaku w wierszu, który nie jest znakiem odstępu. Pojedynczą dyrektywę można zapisać w wielu wierszach, wstawiając lewy ukośnik () na końcu wierszy pośrednich. Struktura programu 15

#define Dyrektywa powoduje zastąpienie danego identyfikatora tekstem, który został po nim określony, we wszystkich miejscach występowania tego identyfikatora w pliku źródłowym. Na przykład: Jeśli po identyfikatorze nie podamy żadnego tekstu, wówczas preprocesor zdefiniuje ten identyfikator w taki sposób, aby każde sprawdzenie istnienia jego definicji dało w wyniku wartość, a wszystkie wystąpienia identyfikatora w kodzie źródłowym zostały zastąpione tekstem pustym (czyli zostały usunięte). Z takim przypadkiem mieliśmy do czynienia wcześniej przy definiowaniu identyfikatora. UWAGA W języku C++, zamiast stosowania dyrektywy bardziej wskazane jest definiowanie danych stałych jako wyliczeń oraz zmiennych i danych składowych deklarowanych z zastosowaniem słów kluczowych lub. Dyrektywa może również przyjmować argumenty w celu zastąpienia makroinstrukcji w tekście. Na przykład: W celu uniknięcia nieoczekiwanych problemów związanych z pierwszeństwem operatorów, parametry występujące w tekście umieszczać należy w nawiasach, jak pokazano powyżej. 16 C++. Leksykon kieszonkowy

UWAGA W języku C++ bardziej wskazane jest stosowanie szabloónów oraz funkcji typu zamiast makroinstrukcji. Użycie szablonów i funkcji typu eliminuje niespodziewane efekty powodowane przez makra, jak np. dwukrotna inkrementacja zmiennej przez makro, w przypadku gdy parametr jest mniejszy od (przy zastępowaniu makra jako pierwszy parametr traktowane jest wyrażenie, a nie wynik operacji ). #undef Dyrektywa usuwa definicję identyfikatora tak, aby sprawdzenie jego istnienia dawało w wyniku wartość. Na przykład: #ifdef, #ifndef, #else, #endif Dyrektywy,,, stosowane są łącznie. Dyrektywa powoduje dołączenie przez preprocesor innego kodu w zależności od istnienia lub braku definicji danego identyfikatora. Na przykład: Użycie dyrektywy jest opcjonalne. Dyrektywa działa podobnie, lecz powoduje dołączenie występującego po niej kodu tylko wtedy, gdy brakuje definicji danego identyfikatoyra. Struktura programu 17

#if, #elif, #else, #endif Dyrektywy,,,, podobnie jak dyrektywy, stosowane są łącznie. Powodują one dołączenie lub wykluczenie przez preprocesor kodu w zależności od prawdziwości danego wyrażenia. Na przykład: Dyrektywa (else-if) służy do łańcuchowego łączenia szeregu testów, jak pokazano powyżej. #include Dyrektywa powoduje dołączenie przez preprocesor innego pliku, zazwyczaj pliku nagłówkowego. Nazwy standardowych plików nagłówkowych ujmujemy w nawiasy ostre, a plików nagłówkowych zdefiniowanych przez użytkownika w znaki cudzysłowu. Na przykład: W zależności od sposobu podania nazwy pliku nagłówkowego preprocesor przeszukiwał będzie inne ścieżki. To, które ścieżki zostaną przeszukane, zależy od systemu. #error Dyrektywa powoduje przerwanie kompilacji i wyświetlenie określonego tekstu. Na przykład: 18 C++. Leksykon kieszonkowy

#line Dyrektywa sprawia, że preprocesor modyfikuje bieżący numer wiersza zapisywany wewnętrznie przez kompilator podczas kompilacji w makrodefinicji. Na przykład: Po numerze wiersza można opcjonalnie podać nazwę pliku ujętą w znaki cudzysłowu. Powoduje to zmianę nazwy pliku wewnętrznie zapisywanej przez kompilator w makrodefinicji. Na przykład: #pragma Niektóre operacje, które preprocesor może wykonać, są specyficzne dla implementacji. Dyrektywa umożliwia sterowanie tymi operacjami przez podanie dyrektywy wraz z dowolnymi parametrami w postaci wymaganej przez tę dyrektywę. Na przykład: W przypadku kompilatora Microsoft Visual C++ 6.0 dyrektywa nakazuje preprocesorowi wyświetlenie komunikatu podczas kompilacji w momencie napotkania zawierającego ją wiersza. Dyrektywa ta wymaga jednego parametru komunikatu, który ma zostać wyświetlony. Jego tekst, ujęty w znaki cudzysłowu, umieszczany jest w nawiasach. Struktura programu 19

Makra preprocesora Preprocesor języka C++ definiuje kilka makrodefinicji służących do wstawiania informacji do pliku źródłowego podczas kompilacji. Każdy identyfikator makra rozpoczyna się i kończy dwoma znakami podkreślenia, za wyjątkiem makra, które nie posiada kończących znaków podkreślenia. Rozwija się do bieżącego numeru wiersza kompilowanego pliku źródłowego. Rozwija się do nazwy kompilowanego pliku źródłowego. Rozwija się do daty kompilacji. Rozwija się do godziny kompilacji. Rozwija się do daty i godziny kompilacji. Będzie zdefiniowane, jeśli kompilator jest w pełni zgodny ze standardem ANSI C. Będzie zdefiniowane, jeśli kompilowany program jest programem w języku C++. Sposób, w jaki kompilator ustala, czy dany program jest programem C++, zależy od kompilatora. Może istnieć konieczność ustawienia odpowiedniej opcji kompilatora lub kompilator może brać pod uwagę rozszerzenie pliku źródłowego. 20 C++. Leksykon kieszonkowy