Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałBogdan Seweryn Komorowski Został zmieniony 9 lat temu
1
Podstawy informatyki Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka
2
Preprocesor To ta część środowiska programistycznego, która jest uruchamiana bezpośrednio przed uruchomieniem właściwego kompilatora. Dokonuje pierwszego przeglądnięcia plików źródłowych. Rozpoznaje dyrektywy i interpretując je, dokonuje odpowiednich działań ingerując w kod.
3
Preprocesor Dyrektywy są umieszczane w stosownych miejscach programu w osobnej linii programu. Zaczynają się od znaku # (może on być poprzedzony białymi znakami), po którym następuje nazwa dyrektywy oraz ewentualnie argumenty: #nazwa_dyrektywy arg Nie kończą się średnikiem! Jeśli dyrektywa nie mieści się w jednej linii, oddzielamy linie znakiem \ (backslash).
4
Dyrektywa define Postać: #define nazwa zastępczy_ciąg_znaków Dyrektywa ta powoduje, że w kompilowanym pliku każde wystąpienie słowa nazwa będzie zastąpione przez podany dalej zastępczy_ciąg_znaków. Nazwa nie może zawierać białych znaków. Białe znaki mogą pojawić się w zastępczym ciągu znaków. Można opuścić zastępczy ciąg znaków: #define nazwa
5
Dyrektywa define #include using namespace std; #define PI 3.1416 int main() { cout << PI*2*2 << endl; return 0; } const double PI=3.1416;
6
Dyrektywa undef Postać: #undef nazwa Występuje zawsze w parze z dyrektywą #define nazwa Dyrektywa ta określa miejsce w pliku, od którego przestaje obowiązywać zdefiniowana wcześniej dyrektywa #define nazwa
7
Makrodefinicja #include using namespace std; #define wieksza(a,b) (a > b ? a : b) int main() { int a=1,b=5; cout<<wieksza(a,b)<<endl; return 0; }
8
Funkcja inline #include using namespace std; inline int wieksza(int a,int b) { return (a>b?a:b); } int main() { int a=1,b=5; cout<<wieksza(a,b)<<endl; return 0; }
9
Define vs inline #include using namespace std; inline int wieksza(int a,int b){ return (a>b?a:b);} int main() { int a=1,b=5; cout<<wieksza(++a,++b)<<endl; cout<<a<<endl; cout<<b<<endl; return 0; } #include using namespace std; #define wieksza(a,b) (a>b?a:b) int main() { int a=1,b=5; cout<<wieksza(++a,++b)<<endl; cout<<a<<endl; cout<<b<<endl; return 0; } 626626 727727
10
Define vs inline #include using namespace std; #define kwadrat(a) a*a int main() { int a=2; cout<<kwadrat(a)<<endl; return 0; } #include using namespace std; #define kwadrat(a) a*a int main() { int a=2,b=5; cout<<kwadrat(a+b)<<endl; return 0; } 4 17
11
Define vs inline #include using namespace std; inline int wieksza(int a,int b) { return (a>b?a:b); } #include using namespace std; #define wieksza(a,b) (a>b?a:b) Działa dla typu int Działa dla dowolnego typu Rozwiązanie: szablon funkcji
12
Kompilacja warunkowa Czasem istnieje konieczność, aby pewne linie kody były kompilowane tylko wtedy, gdy będzie to konieczne, np.: –Debugowanie programu – wyświetlanie dodatkowych informacji, –Dołączanie pewnych fragmentów kodu zależy od środowisku pewnych nazw. Kompilacja danego oznaczonego fragmentu kodu wykona się lub nie w zależności od spełnienia pewnych warunków.
13
Kompilacja warunkowa #include using namespace std; #define N 0 int main() { int a=1,b=5; #if N cout<<a<<endl; #endif cout<<b<<endl; return 0; } 5 1515 #denife N 1
14
Dyrektywa include Postać: #include #include "nazwa_pliku" W dane miejsce w kompilowanym pliku źródłowym (w którym występuje ta dyrektywa) wstawiana jest zawartość pliku o zadanej nazwie. Najczęściej używana dla wstawiania plików nagłówkowych (z definicjami typów, struktur danych, klas, itp.).
15
Pliki nagłówkowe Plik a.h int a; Plik b.cpp #include"a.h" int b; Plik b.cpp int a; int b;
16
Pliki nagłówkowe Plik a.h int a; Plik b.h #include"a.h" int b; Plik c.cpp #include"a.h" #include"b.h" Plik b.h int a; int b; Plik c.cpp int a; int b; BŁĄD redefinicja
17
ifdef ifndef #ifndef PLIK_H #define PLIK_H... tersc pliku naglowkowego #endif
18
Pliki nagłówkowe Plik a.h #ifndef A_H #define A_H int a; #endif Plik b.h #ifndef B_H #define B_H #include"a.h" int b; #endif Plik c.cpp #include"a.h" #include"b.h" Plik b.h #ifndef B_H #define B_H #ifndef A_H #define A_H int a; #endif int b; #endif Plik c.cpp #ifndef A_H #define A_H int a; #endif #ifndef B_H #define B_H #ifndef A_H #define A_H int a; #endif int b; #endif Nie istnieje A_H Definiujemy A_H Definiujemy a Nie istnieje B_H Definiujemy B_H Istnieje A_H Nie definiujemy po raz drugi a Definiujemy b
19
Nazwy predefiniowane #include using namespace std; int main() { cout<<__FILE__<<endl; cout<<__LINE__<<endl; cout<<__DATE__<<endl; cout<<__TIME__<<endl; return 0; } Data i godzina kompilacji (nie aktualna)
20
Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.