Strona główna » Liceum » Przedmioty ścisłe » Informatyka


C++ - wykład 7



Poprzednia praca: C++ - wykład 8
Następna praca: C++ - wykład 6



Treść:
Wykład 7 - 3 godz.
Zakres tematyczny
1. Dyrektywy preprocesora
1. Preprocesor
C/C++ pozwala na pewne rozszerzenie języka za pomoca tzw. preprocesora. Pozwala on na:
- definiowanie makrodefinicji pozwalających uprościć postać kodu źródłowego programu, zwiększając jego czytelność,
- włączanie tekstów innych plików, takich jak zbiory nagłówkowe zawierające prototypy standardowych funkcji bibliotecznych, definicje niezbędnych stałych ect.,
- sterowanie przebiegiem kompilacji.

Kompilatory wszystkich języków (zintegrowane jak i zewnętrzne) zanim przystąpią do generowania kodu wynikowego, wykonują wszystkie zadania przewidziane dla preprocesora. O tym co ma zrobić preprocesor decyduje w zasadzie programista za pomoca tzw. dyrektyw preprocesora.
Preprocesor języka C/C++ rozpoznaje następujące dyrektywy:
#define #undef
#elif #else #endif
#error #line #pragma
#if #ifdef #ifndef
Każdy tekst następujący po dyrektywie musi być ujęty w znaki komentarzy, chyba że dyrektywa ma argumenty. Linie kontynuacji w preprocesorze zakończone są znakiem "".
Dyrektywy te umieszcza się w dowolnym miejscu, a ich znakiem szczególnym jest fakt, że pierwszym niebiałym znakiem jest znak #. Przed tym znakiem mogą być tylko spacje i tabulatory. Dyrektywy obejmują tylko zbiór tekstowy w którym się znajdują. Z pewna dyrektywa już się Państwo oswoiliście, mianowicie z dyrektywa #include. O innych pomówimy poniżej.
Dyrektywa # define
Dyrektywa ta służy do przyporządkowywania identyfikatorów :
a) stałym
b)słowom kluczowym, instrukcjom lub wyrażeniom.
Identyfikatory, które reprezentują stałe nazywamy stałymi symbolicznymi, natomiast te które reprezentują instrukcje i wyrażenia - makrami. Każda stała symboliczna i makro mają swoją nazwę.
W momencie, gdy nazwa makra rozpoznawana jest w tekście programu, jest traktowana jako wywołanie makra. Nazwa makra zamieniana jest przez kopie treści (ciała) makra. Jeśli makro jest z argumentami, argumenty aktualne zamieniane są z formalnymi (podobnie jak to było w przypadku funkcji). Proces ten nazywany jest rozwinięciem makra.
Dyrektywa define pozwala tworzyć makra typu:
a)obiekt - bez argumentów
b)funkcja - które przyjmują argumenty i wyglądaja i działaja jak funkcja.
Makra są pozostałościa z języka C. W obecnych wersjach C++ moga być z powodzeniem zastąpione (czasami na dobre to wychodzi) poprzez tzw. funkcje inline. Co to takiego jest funkcja inline.
Wiemy, że za każdorazowe wywołanie funkcji w programie się płaci. Na poziomie języka maszynowego musi zostać wykonane kilka instrukcji obsługujących to przejście z miejsca wywołania w inne miejsce programu. Poza tym po wykonaniu funkcji muszą się wykonać pewne operacje związane z np. zwalnianiem pamięci, a to trochę trwa.
Jeśli więc jakaś funkcja jest wielokrotnie wywoływana w trakcie programu, to czas może być istotnym czynnikiem. Możemy więc zamiast wywoływać funkcje, w miejscach tych wpisać jej treść, co przy dużych funkcjach ( kilkaset linii) jest bardzo żmudne, aczkolwiek program wykona się szybciej.
Opracowano więc sposób postepowania, który charakteryzuje się
1. jasnością zapisu - jak w zwykłej funkcji
2. dużą szybkością działania - jak w przypadku wpisania treści w linii( ang. inline - stąd nazwa funkcji)
Sposób definiowania takiej funkcji jest prosty:
inline int dodaj(int a, int b)
{
return (a + b);
}
Widzimy więc, że nic poza dodatkowym słowem inline się w opisie funkcji nie zmienia. Ilekroć w programie umieścimy nazwę funkcji tylekroć kompilator umieści jej treść w linii, w której to wywołanie nastapiło. Nie będzie więc żadnych dodatkowych działań ze strony procesora - kod wykona się szybciej. Funkcje tego typu w przeciwieństwie do standardowych funkcji muszą być umieszczone na początku programu, razem z jej deklaracją. Cialo takiej funkcji musi być bowiem znane kompilatorowi już na etapie kompilacji.
Przykłady definiowania makr
- makro typu obiekt
#define identyfikator treść
#define ESC 27
#define TRUE 1
#define Imie "ANNA"
#define ROZ 10
void funkcja(...)
{
int tablica[ROZ];
............
}
Dyrektywa w tym przypadku zamienia w kompilowanym tekście identyfikator na ciąg znaków treść.
Makra typu obiekt najczęściej używane są do definiowania stałych . Jest to też przeżytek z języka dawnego C. Lepszym narzędziem jest teraz modyfikator const (lepszym bo jest to normalny obiekt w pamięci do którego można odwoływać się poprzez wskaźnik, można zadeklarowac mu określony zasięg - globalny lokalny itp. inne dodatkowe strony użycia operatora const - prosze przemyśleć samodzielnie).
-makro typu funkcja
#define identyfikator(iden1....identn) treść
Po nazwie identyfikatora, a przed nawiasem nie może być spacji.
#define pole_pow_kuli(x) 4*pi*x*x
wtedy wywołanie makra w treści prgramu:
P = pole_pow_kuli(r);
jest rozwijane do postaci:
P= 4*pi*r*r;
Zastępowanie nazw makr rozwinięciami dokonuje się w całym pliku źródłowym. Nie dokonuje sie wtedy, gdy:
- identyfikator występuje w komentarzu
- identyfikator występuje wewnątrz stringu.
- lub jako część dłuższj dyrektywy.
Czasami użycie makr daje nieoczekiwane wyniki, np. w treści makra występuje kilkakrotnie ten sam parametr i w dodatku na tym parametrze chcemy wykonać operację inkrementacji np.
#define KWADRAT(a) ((a) * (a))
main()
{
..............
int x = 4,p;
p = KWADRAT(x++);
cout...


Widzisz tylko część pracy, aby zobaczyć całość, musisz się zalogować.

Nie masz jeszcze u Nas konta? Na co czekasz? ZAREJESTRUJ SIĘ JUŻ TERAZ

Zapomniałeś hasła? Skorzystaj z formularza przypominającego hasło.


Czytano: 1823 , autor: ew.la , Ocena: 33.12

      Blip Śledzik Twitter Facebook Buzz Wykop

Inne podobne teksty do tytułu C++ - wykład 7

C++ - wykład 8
C++ - wykład 6
C++ - wykład 3
C++ - wykład 1
C++ - wykład 2/4
C++ - wykład 4/4
C++ - wykład 3/4
C++ - wykład 4/4 cd.
Tablice w jezyku C++


Losowe teksty z tej samej kategorii

Telefonia Internetowa.
Historia komputera (1)
Przetwarzanie wsadowe w MS-DOS
program matrix
Kamienie milowe w Technologii Informacyjnej
Standardy zapisywania dźwięku
Kontakty w rzeczywistości wirtualnej - zalety i wady.
Urzadzenia techniki komputerowej
Rodzaje pamięci i Nośniki pamięci
Przykładowy projekt pracowni komputerowej -bez rysunków.


Wasze komentarze

Brak komentarzy dla danej pracy.




Zmień kategorię:

Zobacz także:

Przedmioty ścisłe
Chemia Chemia
Fizyka Fizyka
Informatyka Informatyka
Matematyka Matematyka

A A A A - zmień wielkość czcionki


Oceń pracę:

Ocena pracy wynosi 33.12.

Informacje o pracy:

⇒Dodano: 2008-02-11 21:04:14
⇒Czytano: 1823
Autor: ew.la


Dodatkowe opcje:

Drukuj stronę
ZGŁOŚ NARUSZENIE
Wyślij znajomemu
Dodaj do ULUBIONYCH



Dodaj komentarz:

Tytuł:

Treść: