Funkcja główna.
Każdy program w C i C++ musi mieć funkcję główną; i od Ciebie zależy, gdzie go umieścisz. Niektórzy programiści umieszczają go na początku pliku, inni na końcu. Niezależnie jednak od jej położenia należy pamiętać o następujących kwestiach: Argumenty funkcji „głównej”. Procedura startowa Borland C++ wysyła do funkcji głównej trzy parametry (argumenty): argc, argv i env. - argc, liczba całkowita, to liczba argumentów linii poleceń wysłanych do funkcji głównej, - argv to tablica wskaźników do łańcuchów (char *). W systemie DOS 3.x i nowszych wersjach argv definiuje się jako pełną ścieżkę programu, który ma zostać uruchomiony. Podczas uruchamiania we wcześniejszych wersjach DOS-u argv wskazuje na ciąg zerowy („”). argv wskazuje pierwszą linię poleceń po nazwie programu. argv wskazuje na drugą linię poleceń po nazwie programu. argv wskazuje na ostatni argument wysłany do main. argv zawiera NULL. - env to także tablica wskaźników do ciągów znaków. Każdy element env zawiera ciąg znaków w postaci ENVVAR=wartość. ENVVAR to nazwa zmiennej środowiskowej, takiej jak PATH lub 87.<значение>jest to wartość danej zmiennej środowiskowej, na przykład C:\DOS;C:\TOOLS (dla PATH) lub YES (dla 87). Należy jednak pamiętać, że jeśli określisz niektóre z tych argumentów, musisz je podać w następującej kolejności: argc, argv, env. Na przykład poprawne są następujące deklaracje argumentów: main() main(int argc) /* poprawne, ale niezbyt dobre */ main(int argc, char *argv) main(int argc, char *argv, char *env) Main (int)deklaracja argc) nie jest zbyt wygodna, ponieważ znając liczbę parametrów, sam nie masz do nich dostępu. Argument env jest zawsze dostępny poprzez zmienną globalną environ. Zobacz zmienną environ (w rozdziale 3) oraz funkcje putenv i getenv (w rozdziale 2). Parametry argc i argv są również dostępne poprzez zmienne _argc i _argv. Przykładowy program wykorzystujący argc, argv i env. To jest przykładowy program ARGS.EXE, który demonstruje najprostszy sposób użycia argumentów przekazanych do funkcji głównej. /* Program ARGS.C */ #includeStrona 53 z 85
1.5.3. Przekazywanie parametrów do funkcji main
Funkcję główną rozpoczynającą wykonanie programu w języku C można zdefiniować za pomocą parametrów przekazywanych ze środowiska zewnętrznego, na przykład z wiersza poleceń. Środowisko zewnętrzne ma swoje własne zasady reprezentacji danych, a raczej wszystkie dane są prezentowane w postaci ciągów znaków. Aby przekazać te ciągi do funkcji głównej, używane są dwa parametry, pierwszy parametr służy do przesyłania liczby ciągów do przesłania, drugi służy do przesyłania samych ciągów. Typowe (ale nie wymagane) nazwy tych parametrów to argc i argv. Parametr argc jest typu int, jego wartość powstaje na podstawie analizy linii poleceń i jest równa liczbie słów w linii poleceń, łącznie z nazwą wywoływanego programu (słowo to dowolny tekst nie zawierający spacji postać). Parametr argv jest tablicą wskaźników do ciągów znaków, z których każdy zawiera jedno słowo z wiersza poleceń. Jeśli słowo musi zawierać znak spacji, podczas zapisywania go w wierszu poleceń musi być ujęte w cudzysłów.
Funkcja główna może posiadać także trzeci parametr, który zwykle nazywany jest argp i który służy do przekazania do funkcji głównej parametrów systemu operacyjnego (środowiska), w którym wykonywany jest program w języku programowania C.
Główny nagłówek funkcji wygląda następująco:
Jeżeli np. linia poleceń programu w języku programowania C wygląda następująco:
Odp.:\>cprog działający „program C” 1
wówczas argumenty argc, argv, argp są reprezentowane w pamięci, jak pokazano na schemacie na ryc. 1.
Argc[4]
argv --> -->
-->
-->
-->
argp --> -->
-->
-->
-->
Ryc.1. Układ opcji wiersza poleceń
System operacyjny obsługuje przekazywanie wartości parametrów argc, argv, argp i obowiązkiem użytkownika jest przekazanie i wykorzystanie rzeczywistych argumentów do funkcji głównej.
Poniższy przykład to program, który wypisuje rzeczywiste argumenty przekazane do funkcji głównej z systemu operacyjnego i parametrów systemu operacyjnego.
Przykład:
int main (int argc, char *argv, char *argp)
( int i=0;
printf("\nNazwa programu %s", argv);
dla (i=1; i>=argc; i++)
printf("\n argument %d to %s", argv[i]);
printf("\nUstawienia systemu operacyjnego:");
podczas gdy (*argp)
( printf („\n %s”,*argp);
argp++;
}
powrót(0);
}
Dostęp do parametrów systemu operacyjnego można również uzyskać za pomocą funkcji biblioteki geteuv; jej prototyp wygląda następująco:
char *geteuv (stała char *nazwa_zmiennej);
Argument tej funkcji określa nazwę parametru środowiskowego, wskaźnik do którego wartości zostanie zwrócony przez funkcję geteuv. Jeśli określony parametr nie jest aktualnie zdefiniowany w środowisku, zwracaną wartością będzie NULL.
Za pomocą wskaźnika uzyskanego funkcją geteuv można jedynie odczytać wartość parametru systemu operacyjnego, ale nie można jej zmienić. Funkcja puteuv służy do zmiany wartości parametru systemowego.
Kompilator języka programowania C konstruuje program w języku C w taki sposób, że na początku programu wykonywana jest pewna inicjalizacja, obejmująca między innymi przetwarzanie argumentów przekazanych do funkcji głównej i przekazanie jej wartości parametrów środowiskowych. Akcje te są wykonywane przez funkcje biblioteczne _setargv i _seteuv, które kompilator zawsze umieszcza przed funkcją główną.
Jeżeli program w języku programowania C nie wykorzystuje przekazywania argumentów i wartości parametrów systemu operacyjnego, wówczas wskazane jest zakazanie korzystania z funkcji bibliotecznych _setargv i _seteuv poprzez umieszczenie w programie C w języku programowania, przed funkcją główną funkcje o tych samych nazwach, ale które nie wykonują żadnych akcji (odgałęzień). Początek programu w tym przypadku będzie wyglądał następująco:
setargv()
}
-seteuv()
( return ; /* pusta funkcja */
}
int główny()
( /* funkcja główna bez argumentów */
...
...
renur (0);
}
W powyższym programie przy wywołaniu funkcji bibliotecznych _setargv i _seteuv funkcje umieszczone w programie przez użytkownika zostaną wykorzystane i nie wykonają żadnych akcji. Spowoduje to znaczne zmniejszenie rozmiaru wynikowego pliku exe.
Borland C++ obsługuje trzy argumenty funkcji main(). Pierwsze dwa to tradycyjne argc i argv. Są to jedyne argumenty funkcji main() zdefiniowane w standardzie ANSI C. Umożliwiają przekazywanie do programu argumentów wiersza poleceń. Argumenty wiersza poleceń to informacje występujące po nazwie programu w wierszu poleceń systemu operacyjnego. Na przykład, gdy program jest kompilowany przy użyciu kompilatora liniowego Borland, zwykle wpisuje się go jako bcc Nazwa programu
Gdzie Nazwa programu to program, który należy skompilować. Nazwa programu jest przekazywana do kompilatora jako argument.
Parametr argc zawiera liczbę argumentów wiersza poleceń i jest liczbą całkowitą. Jest zawsze równa co najmniej 1, ponieważ nazwa programu kwalifikuje się jako pierwszy argument. Parametr argv jest wskaźnikiem do tablicy wskaźników znakowych. Każdy element tej tablicy wskazuje na argument wiersza poleceń. Wszystkie argumenty wiersza poleceń są ciągami znaków. Wszystkie liczby są konwertowane przez program do formatu wewnętrznego. Poniższy program wypisuje słowo „Hello”, po którym następuje nazwa użytkownika, jeśli zostanie wpisana bezpośrednio po nazwie programu:
#włączać
{
jeśli(argc!=2)
{
printf("Zapomniałeś wpisać swoje imię\n");
zwróć 1;
}
printf("Witam %s", argv);
zwróć 0;
}
Jeśli wywołasz tę nazwę programu, a nazwa użytkownika to Sergey, to aby uruchomić program, powinieneś wpisać:
imię Siergiej.
W wyniku działania programu wyświetli się:
„Witam, Siergiej”.
Argumenty wiersza poleceń muszą być oddzielone spacjami lub tabulatorami. Przecinki, średniki i podobne znaki nie są uważane za ograniczniki. Na przykład:
Składa się z trzech linii, podczas gdy
Herb, Rick, Fred
To jest jedna linia – przecinki nie są ogranicznikami.
Jeśli chcesz przekazać ciąg zawierający spacje lub tabulatory jako pojedynczy argument, musisz ująć go w cudzysłów. Na przykład jest to jeden z argumentów:
"to jest test"
Ważne jest, aby poprawnie zadeklarować argv. Najbardziej typową metodą jest:
Puste nawiasy wskazują, że tablica nie ma stałej długości. Możesz uzyskać dostęp poszczególne elementy przy użyciu indeksowania argv. Na przykład argv wskazuje pierwszą linię, która zawsze zawiera nazwę programu. argv wskazuje następną linię i tak dalej.
Poniżej znajduje się mały przykład użycia argumentów wiersza poleceń. Odlicza od wartości określonej w wierszu poleceń i emituje sygnał, gdy osiągnie zero. Zauważ, że pierwszy argument zawiera liczbę przekonwertowaną na liczbę całkowitą przy użyciu standardowej funkcji atoi(). Jeżeli jako drugi argument występuje ciąg „display”, to na ekranie zostanie wyświetlony sam licznik.
/* program liczący */
#włączać
#włączać
#włączać
int main(int argc, char *argv)
{
int disp, liczba;
jeśli (argc<2)
{
printf("Musisz podać długość licznika\n");
printf("w wierszu poleceń. Spróbuj ponownie.\n");
zwróć 1;
}
if (argc==3 && !strcmp(argv,"wyświetlacz")) disp = 1;
w przeciwnym razie disp = 0;
for(count=atoi(argv); liczba; -liczba)
if (disp) printf("%d ", liczba);
printf("%c", "\a"); /* na większości komputerów jest to wywołanie */
zwróć 0;
}
Należy pamiętać, że jeśli nie zostaną określone żadne argumenty, pojawi się komunikat o błędzie. Jest to najbardziej typowe w przypadku programów, które używają argumentów wiersza poleceń do wydawania instrukcji, jeśli podjęto próbę uruchomienia programu bez poprawnych informacji.
Aby uzyskać dostęp do poszczególnych znaków wiersza poleceń, dodaj drugi indeks do argv. Na przykład następujący program wypisuje po jednym znaku wszystkie argumenty, z którymi został wywołany:
#włączać
int main(int argc, char *argv)
{
int t, i;
dla(t=0; t
ja = 0;
podczas(argv[t][i])
{
printf("%c", argv[t][i]);
}
printf(" ");
}
zwróć 0;
}
Musimy pamiętać, że pierwszy indeks służy do dostępu do ciągu, a drugi do dostępu do znaku w ciągu.
Zazwyczaj do uzyskiwania poleceń źródłowych używa się argc i argv. Teoretycznie możliwe jest posiadanie do 32767 argumentów, ale większość systemów operacyjnych nie pozwala nawet się do tego zbliżyć. Zwykle te argumenty służą do określenia nazwy pliku lub opcji. Użycie argumentów wiersza poleceń nadaje programowi profesjonalny wygląd i umożliwia używanie programu w plikach wsadowych.
Jeśli dołączysz plik WILDARGS.OBJ dostarczony z Borland C++, możesz używać szablonów w argumentach typu *.EXE. (Borland C++ automatycznie obsługuje symbole wieloznaczne i odpowiednio zwiększa argc.) Na przykład, jeśli podłączysz plik WILDARGS.OBJ do następującego programu, wyświetli się informacja, ile plików odpowiada nazwie pliku określonej w wierszu poleceń:
/* Połącz ten program z WILDARGS.OBJ */
#włączać
int main(int argc, char *argv)
{
zarejestruj się w ja;
printf("%d plików pasuje do podanej nazwy\n", argc-1);
printf("Są to: ");
dla (i=1; tj
zwróć 0;
}
Jeśli nazwiemy ten program WA, to uruchomimy go w następujący sposób, otrzymamy ilość plików z rozszerzeniem EXE oraz listę nazw tych plików:
Oprócz argc i argv, Borland C++ udostępnia także trzeci argument wiersza poleceń -env. Parametr env umożliwia programowi dostęp do informacji o środowisku systemu operacyjnego. Parametr env musi występować po argc i argv i jest zadeklarowany w następujący sposób:
Jak widać, env deklaruje się w taki sam sposób jak argv. Podobnie jak argv, jest to wskaźnik do tablicy ciągów. Każda linia jest ciągiem środowiskowym zdefiniowanym przez system operacyjny. Parametr env nie ma równoważnego parametru argc, który określa liczbę wierszy środowiska. Zamiast tego ostatnia linia środowiska ma wartość null. Poniższy program wypisuje wszystkie ciągi znaków środowiska aktualnie zdefiniowane w systemie operacyjnym:
/* ten program wyświetla wszystkie linie środowiska */
#włączać
int main(int argc, char *argv, char *env)
{
int t;
for(t=0; środowisko[t]/t++)
printf("%s\n", env[t]);
zwróć 0;
}
Należy pamiętać, że chociaż argc i argv nie są używane przez program, muszą znajdować się na liście parametrów. C nie zna nazw parametrów. Zamiast tego o ich użyciu decyduje kolejność deklarowania parametrów. W rzeczywistości możesz wywołać parametr, jak chcesz. Ponieważ argc, argv i env są nazwami tradycyjnymi, najlepiej jest ich nadal używać, aby każdy czytający program mógł od razu zrozumieć, że są to argumenty funkcji main().
Typowym zadaniem programów jest wyszukanie wartości zdefiniowanej w ciągu znaków środowiska. Na przykład zawartość linii PATH umożliwia programom korzystanie ze ścieżek wyszukiwania. Poniższy program demonstruje, jak znaleźć ciągi znaków deklarujące standardowe ścieżki wyszukiwania. Wykorzystuje standardową funkcję biblioteczną strstr(), która ma następujący prototyp:
Char *strstr(stała char *str1, stała char *str2);
Funkcja strstr() wyszukuje ciąg znaków wskazany przez str1 w ciągu znaków wskazanym przez str2. Jeżeli taki ciąg zostanie znaleziony, zwracany jest wskaźnik do pierwszej pozycji. Jeśli nie zostaną znalezione żadne dopasowania, funkcja zwraca wartość NULL.
/* program wyszukuje wśród ciągów środowiskowych linię zawierającą PATH */
#włączać
#włączać
int main (int argc, char *argv, char *env)
{
int t;
for(t=0; środowisko[t]; t++)
{
if(strstr(env[t], "ŚCIEŻKA"))
printf("%s\n", env[t]);
}
zwróć 0;
}
Każdy program w C zaczyna się od wywołania funkcji main(). Ta funkcja powinna być w każdym programie.
Jak każda inna funkcja, funkcja main() może mieć parametry. Czasami przy uruchamianiu programu warto przekazać mu pewne informacje. Informacje te są przekazywane do funkcji main() przy użyciu argumentów wiersza poleceń. Argumenty wiersza poleceń– jest to informacja wprowadzana w wierszu poleceń po nazwie programu, gdy program jest uruchamiany do wykonania poza środowiskiem programistycznym. Przykładowo, aby rozpocząć archiwizację pliku task.cpp należy w wierszu poleceń wpisać:
winrara archTaskzadanie.cpp // winrar.exe archTaskzadanie.cpp
gdzie winrar to nazwa programu archiwizującego, a linie „ A», « archTask" I " zadanie. cpp» reprezentuje argumenty wiersza poleceń, które nakazują programowi utworzenie archiwum („ A") Z imieniem archTask z jednego pliku zadanie. cpp.
Przekazując parametry do funkcji main(), należy ją zdefiniować w następujący sposób:
int main(int argc, char *argv) ( ) // lub void main(...)()
Parametr argc zawiera liczbę argumentów linii poleceń i jest liczbą całkowitą, przy czym zawsze wynosi co najmniej 1, ponieważ pierwszym argumentem jest zawsze nazwa programu (nazwa programu z pełną ścieżką do programu).
Parametr argv jest wskaźnikiem do tablicy wskaźników do ciągów. W tej tablicy każdy element wskazuje na następny argument wiersza poleceń. Puste nawiasy kwadratowe wskazują, że tablica ma nieokreśloną długość. Dostęp do poszczególnych argumentów można uzyskać poprzez indeksowanie tablicy argv. Na przykład argv wskazuje na pierwszy ciąg znaków, który zawsze jest nazwą programu; argv wskazuje na pierwszy argument i tak dalej. Lista argumentów jest ograniczona do NULL, tj. argv == NULL.
Aby uzyskać dostęp do pojedynczego znaku jednego z argumentów wiersza poleceń, należy użyć drugiego indeksu w argv. Oznacza to, że pierwszy indeks argv zapewnia dostęp do ciągu, a drugi indeks zapewnia dostęp do jego poszczególnych znaków.
Wszystkie argumenty wiersza poleceń są ciągami znaków, więc konwersja parametrów numerycznych do żądanego formatu musi być zapewniona w programie podczas jego tworzenia.
Przykład programu z różnymi sposobami konwersji liczb w formacie symbolicznym na liczby całkowite i liczby rzeczywiste:
#włączać
#włączać
// przy starcie ustawiamy np. następujące argumenty: 100 2.7
void main(int a, char *b) (
k = strtol(b, &ptr, 10); // ptr = adres błędu w linii
f = strtod(b, &ptr);
sscanf(b, "%d", &k);
sscanf(b, "%lf", &f);
Nazwy argc i argv są tradycyjne, ale nie wymagane. Te dwa parametry w funkcji main() można nazwać dowolnie.
Prosty przykład użycia argumentów wiersza poleceń:
int main(int argc, char *argv) (
if (argc != 4) (
printf("Nieprawidłowe parametry uruchamiania programu!\n");
k = atoi(argv); // konwersja parametru liczbowego
printf("Witam, %s z grupy %s z %d roku",
Jeśli nazwa programu to zadanie, a ty masz na imię „Wasja”, grupa „PM-11” z pierwszego roku, to aby uruchomić program, należy wpisać w wierszu poleceń:
zadanie Wasia PM-11 1
W wyniku wykonania programu na ekranie pojawi się komunikat: „Witam, Wasio z grupy I roku PM-11”.
Należy pamiętać, że jeśli nie zostaną podane wszystkie argumenty wiersza poleceń, zostanie wyświetlony komunikat o błędzie. Programy pobierające argumenty wiersza poleceń często wykonują następujące czynności: Kiedy użytkownik uruchamia te programy bez wprowadzania wymaganych informacji, wyświetlają instrukcje dotyczące prawidłowego określenia argumentów.
Argumenty wiersza poleceń muszą być oddzielone spacją. Jeśli w samym argumencie znajdują się spacje, aby zapobiec tworzeniu wielu argumentów, argument ten należy ująć w cudzysłów. W rezultacie cały cytowany ciąg zostanie uznany za jeden argument. Na przykład program można uruchomić w następujący sposób: zadanie „Wasya i Petya” PM-21 2. W wyniku wykonania programu na ekranie pojawi się komunikat: „Witajcie, Vasya i Petya z 2. roku PM- 21 grupa.”
Co to jest char *argv? Ten tablica, której elementy są wskaźnikami, to jest tablica wskaźników. Oznacza to, że przekazując parametry do funkcji main(), można to zdefiniować w następujący sposób:
void main(int argc, char **argv) (
Zadanie. Wyświetl wszystkie argumenty wiersza poleceń (nie ma potrzeby wyświetlania nazwy programu).
#włączać
void main(int argc, char *argv)(
dla (i = 1; tj< argc; i++)
printf("%s\n", argv[i]);
Opcja druga ================
#włączać
void main(int argc, char **argv)(
póki((p=*argv) != NULL) (
printf("%s\n", p);
Zwykle argumenty wiersza poleceń służą do zapewnienia programowi danych początkowych, które będą potrzebne podczas uruchamiania (na przykład argumenty wiersza poleceń często przekazują dane, takie jak nazwa pliku lub parametry uruchamiania programu).
Gdy program nie wymaga parametrów wiersza poleceń, funkcja main() używa słowa kluczowego void na swojej liście parametrów (lub po prostu niczego nie określa).
Jak debugować w PNE. programy wymagające argumentów wiersza poleceń. W menu Uruchom → Argumenty... należy wprowadzić argumenty wiersza poleceń. Nie ma potrzeby podawania nazwy programu. Następnie możesz po prostu jak zwykle uruchomić i debugować program w środowisku programistycznym.
Proszę zawiesić AdBlock na tej stronie.
Dlaczego więc potrzebujemy funkcji niestandardowych? Aby ułatwić programistom pisanie programów, potrzebne są funkcje zdefiniowane przez użytkownika.
Pamiętaj, że rozmawialiśmy o paradygmatach programowania, a dokładniej o programowaniu strukturalnym. Główną ideą było to, że dowolny program można napisać przy użyciu tylko trzech podstawowych konstrukcji: podążania, warunku i pętli. Teraz dodamy do tych struktur jeszcze jeden - „podprogramy” - i otrzymamy nowy paradygmat programowanie proceduralne”.
Jedyna różnica polega na tym, że poszczególne fragmenty naszego programu głównego (w szczególności powtarzające się) będziemy pisać w postaci odrębnych funkcji (podprogramów, procedur) i wywoływać je w razie potrzeby. Zasadniczo program będzie teraz opisywał interakcję różnych funkcji.
W tym samouczku omówimy szczegółowo, w jaki sposób funkcje są budowane wewnętrznie. Dowiemy się również, jak tworzyć własne funkcje niestandardowe.
Jak działają funkcje
Zapamiętajmy informacje z pierwszej lekcji. Wszystkie funkcje, także te napisane przez użytkownika, są ułożone w podobny sposób. Składają się z dwóch głównych części: nagłówka funkcji i treści funkcji.
Lista 1.
Int main(void)( // nagłówek funkcji // treść funkcji zapisana w nawiasach klamrowych)
Jeśli chodzi o ciało funkcji, wszystko jest jasne: opisuje algorytm funkcji. Spójrzmy na tytuł. Składa się z trzech obowiązkowych części:
- typ zwrotu;
- nazwa funkcji;
- argumenty funkcji.
Najpierw zapisywany jest typ zwracany, na przykład int, jak w funkcji main. Jeżeli funkcja nie powinna zwracać programowi żadnej wartości, to w tym miejscu zapisywane jest słowo kluczowe void. Wydawać by się mogło, że skoro funkcja nic nie zwraca, to nie trzeba nic pisać. Nawiasem mówiąc, wcześniej robiono to w języku C, ale potem dodano to dla ujednolicenia. Obecnie nowoczesne kompilatory będą wyświetlać ostrzeżenia/błędy, jeśli nie określisz typu powrotu.
W niektórych językach programowania funkcje, które nie zwracają żadnej wartości, nazywane są procedurami (na przykład Pascal). Ponadto istnieją różne składnie tworzenia funkcji i procedur. W języku C nie ma takiej dyskryminacji.
Nazwa funkcji jest zapisywana po typie zwracanym. Otóż po nazwie podane są typy i liczba argumentów przekazywanych do funkcji.
Przyjrzyjmy się nagłówkom funkcji, które już znamy.
Lista 2.
// funkcja o nazwie srand, która przyjmuje liczbę całkowitą, nic nie zwraca void srand(int) // funkcja o nazwie sqrt, która przyjmuje liczbę rzeczywistą, zwraca liczbę zmiennoprzecinkową sqrt(float) // funkcja o nazwie Rand, która nie przyjmuje argumentów, zwraca liczbę całkowitą int rand(void) //funkcja o nazwie pow, która przyjmuje dwa argumenty typu double, zwraca liczbę rzeczywistą typu double double pow(double, double)
Jak stworzyć własną funkcję
Aby stworzyć własną funkcję należy ją dokładnie opisać. Obowiązuje tu ogólna zasada: przed użyciem zadeklaruj i opisz, jak ma działać. Aby to zrobić, wróćmy do schematu struktury programu w języku C, który mieliśmy na pierwszej lekcji. Zaznaczmy na nim miejsca, w których można opisać funkcje.
Rys.1 Wyjaśnienie struktury programu. Deklaracja funkcji.
Jak widać, są dwa miejsca, w których można to zrobić.
Spójrzmy na przykład ilustrujący tworzenie niestandardowej funkcji obliczającej maksymalnie dwie liczby.
Lista 3.
#włączać
Opiszę szczegółowo jak ten program będzie działał. Wykonywane jest ciało funkcji głównej. Tworzone są zmienne całkowite x, y i m. Zmienne x i y są odczytywane z klawiatury. Powiedzmy, że wprowadziliśmy 3 5, następnie x = 3, y = 5. To wszystko powinno być dla Ciebie jasne. Teraz następna linijka
Lista 4.
M = max_num(x,y);
Zmienną m należy przypisać do tego, co znajduje się na prawo od znaku =. Tam mamy nazwę funkcji, którą sami stworzyliśmy. Komputer szuka deklaracji i opisu tej funkcji. Znajduje się powyżej. Zgodnie z tą deklaracją funkcja ta musi przyjmować dwie wartości całkowite. W naszym przypadku są to wartości zapisane w zmiennych x i y. Te. numery 3 i 5. Należy pamiętać, że do funkcji przekazywane są nie same zmienne x i y, a jedynie wartości (dwie liczby), które są w nich przechowywane. To, co faktycznie jest przekazywane do funkcji, gdy jest ona wywoływana w programie, nazywa się rzeczywistymi parametrami funkcji.
Teraz rozpoczyna się wykonywanie funkcji max_num. Pierwszym krokiem jest utworzenie osobnej zmiennej tymczasowej dla każdego parametru opisanego w nagłówku funkcji. W naszym przypadku tworzone są dwie zmienne całkowite o nazwach a i b. Zmiennym tym przypisane są wartości rzeczywistych parametrów. Same parametry, opisane w nagłówku funkcji, nazywane są parametrami formalnymi. Zatem parametrom formalnym a i b przypisuje się odpowiednio wartości parametrów rzeczywistych 3 i 5. Teraz a = 3, b = 5. W dalszej części funkcji możemy pracować z tymi zmiennymi, jakby były zwykłymi zmiennymi.
Tworzona jest zmienna całkowita o nazwie max, której przypisuje się wartość b. Następnie sprawdzany jest warunek a > b. Jeżeli jest to prawda, to wartość zmiennej max należy zastąpić znakiem .
Następnie następuje instrukcja return, która zwraca do programu wywołującego (funkcji main) wartość zapisaną w zmiennej max, czyli: 5. Po czym zmienne a, b i max są usuwane z pamięci. I wracamy do wiersza
Lista 5.
M = max_num(x,y);
Funkcja max_num zwróciła wartość 5, co oznacza, że teraz po prawej stronie znaku = znajduje się liczba 5. Wartość ta jest zapisywana do zmiennej m. Następnie na ekranie zostanie wyświetlona linia i program się zakończy.
Przeczytaj uważnie ostatnie 4 akapity ponownie, aby w pełni zrozumieć działanie programu.
W międzyczasie powiem Ci, dlaczego potrzebny jest dolny blok opisów funkcji. Wyobraź sobie, że napisałeś w swoim programie 20 małych funkcji. I wszystkie są opisane przed funkcją główną. Dotarcie do programu głównego na tak długi czas nie jest zbyt wygodne. Aby rozwiązać ten problem, funkcje można opisać w dolnym bloku.
Ale nie będzie można po prostu przenieść tam całego kodu funkcji, ponieważ wtedy złamana zostanie zasada: zanim czegoś użyjesz, musisz to zadeklarować. Aby uniknąć tego problemu, musisz użyć prototypu funkcji.
Prototyp funkcji całkowicie powtarza nagłówek funkcji, po którym następuje ; . Po określeniu prototypu w górnym bloku, w dolnym możemy już w pełni opisać funkcję. Dla powyższego przykładu może to wyglądać tak:
Lista 6.
#włączać
Wszystko jest bardzo proste. Należy pamiętać, że prototyp funkcji nie musi podawać nazw parametrów formalnych, wystarczy wskazać ich typy. W powyższym przykładzie dokładnie to zrobiłem.