Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt
Jerzy F. Kotowski2 Deklaracja funkcji n Deklaracja definiująca - definicja n Deklaracja odwoławcza – klasycznafloat suma();C - C++ – prototypowafloat suma(int a, int b); Definicja funkcji n Nagłówek n Ciało funkcjifunction body
Jerzy F. Kotowski3 Nagłówek funkcji n Nagłówek funkcji zawiera kolejno: – typ zwracanego rezultatu – nazwę funkcji – listę argumentów (parametrów) w nawiasach okrągłych n Deklaracje typów argumentów mogą w całości wystąpić w nagłówku (deklaratorze) lub poza nim n Jeżeli deklaracje typów argumentów występują w całości w nagłówku to nazywa się go prototypem n Ostatnim parametrem na liście może być... float suma(double x, double y, double z)
Jerzy F. Kotowski4 Nagłówek funkcji c.d. n Postać klasyczna n Postać prototypowa float iloczyn(x, y) int x; char y; { return x*y; } float iloczyn(int x, char y) { return x*y; } n Prototyp to nagłówek funkcji zakończony znakiem ; n Prototyp poprawia humor kompilatorowi C i przywraca chęć do życia kompilatorowi C++ n Uwaga! W przykładzie przy zwracaniu rezultatu dokonywana jest projekcja typu int na typ float
Jerzy F. Kotowski5 Przekazywanie argumentów przez wartość i udostępnianie rezultatu n Przykłady wywołania: rezultat = iloczyn(a,b); y = iloczyn(1+3,a); n C++: projekcja na typ deklarowany, tzn: rezultat = iloczyn((int)a,(char)b); n W każdym przypadku zmienne x i y (argumenty formalne) dostają tylko kopie argumentów aktualnych n int pralnia(int klient);- prototyp funkcji pralnia koszt = pralnia(Kasia);- wywołanie n Słowo kluczowe return i void. Kontakt przez stos. float iloczyn(int x, char y) { float wynik = x*y; return wynik; }
Jerzy F. Kotowski6 Przykłady funkcji long silnia(int n) { long silnia = n; while(--n) silnia *= n; return silnia; } n Zmieniamy n, czyli argument formalny n Przykład wywołania: int n=10;// inne n !!! long n_s = silnia(n); printf(%d!=%ld,n,n_s); float min(float a, float b) { if(a<b) return a; else return b; } n Przykład wywołania: y = min(3.5,a); n Przykłady z wykorzystaniem debuggera8_1
Jerzy F. Kotowski7 Klasy zmiennych auto register static extern CZAS ŻYCIA n zakładana w prologu funkcji i kasowana w epilogu. Smieć!! n jak wyżej n jak zmienna globalna (prolog i epilog programu) n jak zmienna globalna Zasięg ważności nazwy n funkcja, blok - C++ n jak wyżej n funkcja n plik źródłowy key- words
Jerzy F. Kotowski8 Klasa auto n Tego słowa kluczowego się praktycznie nie używa n Zmienne klasy auto to zmienne tworzone na stosie - argumenty formalne i zmienne lokalne lub zmienne tworzone wewnątrz bloku n Zjawisko przesłaniania n Formalny zapis: float iloczyn(int x, char y) { auto float wynik = x*y; return wynik; }
Jerzy F. Kotowski9 Klasa register n Składnia podobna: float iloczyn(int x, char y) { register float wynik = x*y; return wynik; } Jest to grzeczna prośba do kompilatora aby w miarę swoich możliwości trzymał taki obiekt pod ręką, a najlepiej w jakimś rejestrze procesora. n Jest optymalizacja pracy programu po czasie tzn. przy kryterium typu czas. Alternatywa - rozmiar.
Jerzy F. Kotowski10 Klasa static n Przykład:int Switch(void) { static int x = 0; x = 1 - x; return x; } n Wystarczy napisać:static x; n Przykład wywołania: for(i=0;i<10;i++) printf(%d,Switch()); n Efekt: n Ograniczenie dostępu typowe dla podejścia obiektowego
Jerzy F. Kotowski11 Projekt inf_8.prj n inf_8_2.cpp #include int x,y; // zmienne globalne int power(int); // prototyp void main(void) { int i; x = 1; y = 2; for(i = 0; i < 10; i++) printf(\n%d, power(++x)); } n inf_8_3.cpp extern int y; // extern int power(int z) { int i, w = 1; for(i = 0; i < y; i++) w *= z; return w; } inf_8_2: W zbiorze stdio.h jest prototyp funkcji printf inf_8_2: Prototyp funkcji power inf_8_2: int i - zmienna widziana wewnątrz funkcji main inf_8_2: int x - zmienna widziana tylko w pliku inf_8_2.cpp inf_8_3: extern int y - zmienna widziana w obu plikach inf_8_3: int i - przesłania zmienną z pliku inf_8_2.cpp
Jerzy F. Kotowski12 Projekt inf_8.prj - komentarze n inf_8_2.cpp n W zbiorze stdio.h jest prototyp funkcji printf n Prototyp funkcji power nie zawiera nazw argumentów tylko ich typy n int i - zmienna widziana wewnątrz funkcji main n int x - zmienna globalna widziana tylko w pliku inf_8_2.cpp n inf_8_3.cpp n extern int y - zmienna widziana w obu plikach n int i - przesłania zmienną z pliku inf_8_2.cpp
Jerzy F. Kotowski13 Projekt - zakładanie i obsługa n Składowe projektu typu *.c* n Składowe projektu typu *.obj n Project/ Open project Close project Add item Delete item8_1,2
Jerzy F. Kotowski14 Debugger n Opcje kompilatora Options /Compiler /Code Generation/Advanced Code Generation /Debug info in OBJs oraz Options /Debugger n Debugg/ Watches/ Add - Delete - Edit - Remove n Debugg/ Evaluate / modify n Debugg/ Breakpoints... n Compile/ Compile - Make - Link - Build n Run/ Run - Go to cursor - Trace into - Step over