Witam i witam ponownie.
W tym wykładzie chcę porozmawiać o definiowaniu funkcji w c.
Definiowanie funkcji.
Wiemy, jak ważne są funkcje.
Rozumiemy zalety.
Będziemy chcieli skorzystać funkcje w naszych programach.
Więc kiedy tworzysz funkcję pro w c, musisz określić
nagłówek funkcji jako pierwszą linię definicji funkcji.
Porozmawiamy o definiowaniu funkcję, a także będziemy
mówić o implementowaniu funkcji.
Realizacja funkcji to tylko rozwiązywanie problemów, to
zwykły kod c.
Definiowanie funkcji mówi że funkcja istnieje.
Więc kiedy definiujesz funkcję, plik pierwszą rzeczą, którą robisz, jest
posiadanie tego nagłówka funkcji, a następnie podążanie za nią to z nawiasem klamrowym, który
rozpoczyna kod bloku funkcji.
Więc to jest tak, jak w przypadku używania pliku
nawias klamrowy w instrukcji if, tak jak w przypadku używania nawiasu klamrowego w pętli for, z wyjątkiem nawiasów
klamrowych, które są wymagane dla funkcji.
Nie da się tego wyeliminować.
I zawsze oznacza początek kodu tej funkcji.
Wszystko pomiędzy początkiem a kończący nawias klamrowy to
kod funkcji.
Tam idziesz do wykonania zadania.
Więc pomiędzy szelkami jest nazywany treścią funkcji i pierwszą linią
funkcji nazywany jest nagłówkiem funkcji.
Nagłówek funkcji określa nazwa funkcji, parametry
funkcji.
Będziemy rozmawiać o szczegółowo parametry i argumenty.
Ale teraz po prostu trzeba wiedzieć, że istnieje coś,
co nazywa się parametrami.
A parametr będzie określał liczba i typy wartości, w
jaki sposób można przekazywać dane, parametry mają do czynienia z przekazywaniem danych.
Typ wartości funkcja zwraca.
Wspomnieliśmy, że działa możemy zwrócić dane.
Więc w nagłówku funkcji będziesz
mieć nazwę funkcji, dane, które możesz wziąć mogą zostać zaakceptowane przez
funkcję i dane zwracana przez funkcję.
Nie będziemy się teraz skupiać na danych, które mogą zostać przekazane lub zwróconych
danych, po prostu to zrobimy porozmawiaj o tworzeniu prostej funkcji.
Treść funkcji zawiera po prostu zwykły kod, a ten kod jest
wykonywany, gdy ty wywołać lub wywołać funkcję.
I sam korpus funkcji będzie mieć dostęp do wszystkich wartości, które są
przekazywane jako argumenty.
Czyli dane, do których przekazujesz można wykorzystać te
dane w treści funkcji.
Jak to wygląda to jest nagłówek funkcji.
Nagłówek funkcji ma pierwsze słowo.
Nagłówek funkcji to plik słowo kluczowe reprezentujące typ danych,
które będą zwrócony z funkcji.
Następne słowo kluczowe to nazwa funkcji.
A potem masz lewy nawias a następnie masz parametry oddzielone przecinkami,
które będą danymi który jest przekazywany do funkcji.
A potem masz to prawe nawiasy,
aby zakończyć nagłówek funkcji.
Następnie masz klamrę kręconą co oznacza początek
implementacji funkcji.
Masz dowolną liczbę instrukcje do wykonania zadania.
Jak powiedziałem, chcesz Twoje funkcje powinny być małe.
Chcą być spójni.
Nie chcą wszędzie wokoło.
Chcą mieć jednego skup się, zrób coś konkretnego.
Jak powiedziałem, jeśli masz funkcję który pobiera dane wejściowe, odczytuje dane wejściowe.
Nie drukuje danych wyjściowych.
Nie robi żadnego sortowania lub nie robi nic innego.
Jeśli masz funkcję o nazwie sort, sortuje dane.
Nie otrzymuje danych wejściowych.
Funkcje muszą być spójny i mały.
O wiele łatwiej jest je debugować funkcje, więc uczyń je spójnymi.
A potem masz to prawo nawias klamrowy
kończący implementację funkcji.
To jest funkcja wygląda jak w c.
Skoncentrujmy się teraz na funkcji nazwy, a później omówimy
parametry i typy zwracane.
Ponownie pierwsza linia funkcji definicja mówi kompilatorowi w kolejności od
lewej do prawej trzy rzeczy o funkcji, jak wspomniałem.
Typ zwracanej wartości, nazwa funkcji, a następnie wszelkie pobierane
przez nią dane.
To tylko podsumowanie, to jest ważne.
Jeśli chodzi o nazwy funkcji, chcesz aby wybrać znaczące nazwy funkcji.
Jest tak samo ważny jak wybór znaczące nazwy zmiennych.
Ma to duży wpływ na czytelność programu, więc
nie nazywaj funkcji x ani y.
Nazwij funkcję opartą na nazwie na temat tego, co zrobi.
Jeśli dodaje dwa numery, nazwij to add.
Jeśli odejmuje dwa liczby, nazwij to odejmowanie.
W tym przykładzie tutaj nasza prosta funkcja.
Nie martw się o pustkę, martw się tylko o nazwę tutaj.
Mamy funkcję nazwana drukuj wiadomość.
A potem widzimy ten kędzierzawy aparat
co oznacza rozpoczęcie funkcji, a następnie mamy jakąś implementację.
I ta realizacja nie robi nic
więcej niż wyświetlenie łańcucha, tekstu.
A potem mamy to prawy nawias klamrowy.
Więc to jest bardzo prosta funkcja niewiele robi, wyświetla dane wyjściowe.
W tym przykładzie do druku komunikat, pierwsza
linia komunikatu drukowania informuje kompilator że funkcja nie zwraca żadnej wartości.
To słowo kluczowe „void”.
Ponownie, nie musisz się na tym skupiać to, ale to właśnie robi.
Następna to nazwa.
A potem po nazwie argumenty, nazywane są parametrami.
I znowu używamy słowa kluczowego void jeśli nie przekazujemy żadnych danych.
Instrukcja w funkcji ciało może być nieobecne, ale aparat ortodontyczny
musi być zawsze obecny.
Więc nie musisz ich mieć implementacja, ale musisz mieć nawiasy klamrowe,
aby funkcja tam była.
Jeśli nie ma żadnych instrukcji w pliku treść funkcji, typ
zwracany musi być nieważny.
I znowu, skupimy się na tym później a funkcja nic nie da,
ponieważ nie masz implementacji.
Jeśli zdefiniujesz funkcję za pomocą puste ciało, nadal może być przydatne,
mimo że jest niczego nie osiąga.
Zwykle robisz to podczas faza testowania bardzo dużego programu.
I na co to pozwala to znaczy, że możesz uruchomić
program tylko z określonymi funkcjami robienie czegoś, pomaga w
lepszym testowaniu, pomaga w wyodrębnianiu błędów.
Możesz nawet mieć implementację w teście w treści funkcji,
ale po prostu go zakomentuj.
A potem możesz to zrobić dziel i zwyciężaj.
W miarę testowania coraz więcej i więcej, możesz wtedy zacząć umieszczać
implementację w treściach funkcji.
To krok po kroku proces pracy.
Ciągle pracujesz w małych fragmenty, dodawanie kodu, testowanie tego kodu i przechodzenie do następnego
krok, a ostatecznie całe wdrożenie zostanie zakończone
i wszystkie funkcje zostaną zaimplementowane.
Jest więc przypadek użycia posiadanie treści funkcji, która nie
ma kodu lub została zakomentowana.
Nazewnictwo funkcji.
Nazwa funkcji może być dowolnym imieniem i nazwiskiem.
Tak jak wtedy, gdy jesteś nazywając zmienną,
nie możesz używać słów zastrzeżonych.
Więc to są słowa kluczowe w język, taki jak enter, jest
podwójny, ponieważ reprezentuje typy danych.
Sizeof jest operatorem.
Chcesz móc używać go do lub jeśli.
Nie możesz też mieć dwóch funkcje o tej samej nazwie.
I to też się odnosi jako przeciążenie funkcji, rodzaj.
Ale nie możesz mieć dwóch funkcji o tej samej nazwie, przeciążanie nie jest
obsługiwane w c.
Wreszcie możesz mieć to samo nazwa jako funkcja znajdująca się w
standardowej funkcji bibliotecznej.
Technicznie, jeśli nie uwzględnisz ta biblioteka zawiera plik nagłówkowy, możesz
go mieć.
Ale jeśli kiedykolwiek chciałeś faktycznie użyć tej funkcji biblioteki, kompilator narzekałby
i powiedział, że masz dwie funkcje o tej samej nazwie.
Więc nie nazywaj swoich funkcji takie same jak standardowe funkcje biblioteczne.
Imię i nazwisko jest takie samo jak zmienna, ciąg liter
i cyfr na początek.
Pierwsza litera musi być literą a litera może być podkreśleniem.
Nie możesz uruchomić funkcji z liczbami lub jakimikolwiek dziwnymi
znakami.
Nazwa, którą wybierzesz, powinna mieć znaczenie i mieć znaczenie dla
tego, co robi funkcja.
Już to powiedziałem, powtarzam dla podkreślenia znaczenia nazwy są
bardzo ważne.
Często będziesz definiować funkcję nazwy i nazwy zmiennych, które składają się
z więcej niż jednego słowa.
Więc teraz chcę trochę porozmawiać trochę o stylu kodowania.
Prawdopodobnie zauważyłeś, kiedy ja napisałem mój kod, że używam obudowy wielbłąda.
Istnieją trzy różne sposoby możesz wpisać nazwy swoich
zmiennych i funkcji.
Możesz oddzielić każde ze słów w nazwie funkcji
z podkreśleniem to jedno podejście.
Możesz zacząć wielką literę każdego słowa lub możesz
zacząć pisać wielkimi literami po pierwszym słowie i nadal brzdąkacie razem.
Pamiętaj, że nie możesz mają spacje pomiędzy.
To jest tylko podejście do nazewnictwo, ponieważ
ważne jest, aby przestrzegać pewnej konwencji aby było łatwiejsze do odczytania.
Mam tylko długie słowo z pięcioma różnymi słowami.
Więc gdybyś miał funkcję, która mówi sprawdź poprawność danych wejściowych, nie chciałbyś,
aby wszystkie były małe.
Byłoby naprawdę trudne do odczytania i zidentyfikować, gdzie były słowa.
Tak więc sprawa wielbłąda to dobry sposób zidentyfikuj, gdzie znajdują się słowa w
wielu słowach i łatwo je zobaczysz co robi ta funkcja.
Podkreślenie to inna sprawa sposób na oddzielenie słów.
I wielką literą jest pierwsza litera każde słowo to inny sposób na rozdzielenie.
Ważne jest, aby móc oddziel słowa w funkcji, aby
była bardziej czytelna.
Zwykle używam wielbłąda.
A kiedy używasz jednego z nich konwencji, chcesz go
używać do wszystkiego, czego chcesz do nazywania zmiennych, chcesz go
użyć do nazw funkcji.
Zwykle po prostu postępujesz zgodnie z tym wspólna konwencja kodowania sprawia, że
wszystko jest bardziej czytelne.
Prototypy funkcji.
Rozmawialiśmy o zdefiniowaniu funkcji.
A co z deklarowaniem funkcji.
Możesz powiedzieć, dlaczego tego potrzebujesz deklaruj funkcję, czy nie deklarujesz
jej, kiedy ją definiujesz.
Ale jest też koncepcja deklarowania funkcji.
I jest to konieczne, jeśli chcesz używać funkcji przed jej
zaimplementowaniem, przed jej zdefiniowaniem.
Zatem prototyp funkcji to instrukcja definiująca funkcję.
Mówi zasadniczo kompilatorowi wszystkie szczegóły funkcji.
Definiuje jego nazwę, typ zwrotu i rodzaj każdego z jego parametrów.
Wygląda więc na nagłówek funkcji.
Zapewnia wszystkie zewnętrzne specyfikacje funkcji, głównie
prawdopodobnie słyszałeś termin podpis, podpis funkcji, oto co
to jest.
Określa zwracane dane, dane, które pobiera
i wszystko o samej funkcji.
Chcesz napisać prototyp funkcji tak samo jak piszesz nagłówek funkcji,
jedyną różnicą jest to na końcu wstaw średnik.
I to jest sprawiedliwe deklarowanie funkcji.
To znaczy, że funkcja istnieje.
Prototyp funkcji umożliwia kompilator do generowania odpowiednich instrukcji
na każdym punkt, w którym wywołujesz funkcję.
Sprawdza również, czy używasz działają poprawnie w każdym wywołaniu.
Powód, dla którego zapewniasz funkcję nagłówki są tak, że można wywołać funkcję
bez ostrzeżenia lub pliku deklaracja funkcji bez jej implementacji, więc tak naprawdę jest
po prostu kolejność kodu, a za
chwilę podam przykład.
Gdy dołączysz standardowy nagłówek pliku w programie, plik
nagłówkowy dodaje prototyp funkcji.
Prototypy funkcji zwykle wchodzą do programu pliki nagłówkowe, jeśli chcesz ich ponownie użyć w
wielu różnych plikach źródłowych.
Jeśli używasz ich tylko w jednym plik źródłowy, możesz po prostu umieścić
je na górze w pliku źródłowym.
Ale ponieważ używamy printf funkcja, która może być używana w
wielu różnych plikach źródłowych, tym nagłówku funkcja zostanie zdefiniowana w nagłówku lub
w tej deklaracji funkcji zostanie zdefiniowana w nagłówku.
W tym przypadku stdio. godz.
Więc zwykle pojawiają się w pliki źródłowe, jeśli tylko ten plik
źródłowy używa tej funkcji.
W przeciwnym razie umieścisz je w pliku nagłówka, jeśli
są ponownie używane przez wiele plików źródłowych.
Pozwala na dowolną funkcję w file, aby wywołać dowolną z tych funkcji,
które są zdefiniowane, niezależnie od tego, gdzie umieściłeś implementację.
Jeśli umieścisz wdrożenie funkcji, po jej wywołaniu, c będzie narzekać i
mówić że o tym nie wie.
Ponieważ kiedy kompilujesz, kompilujesz wiersz po wierszu.
Jeśli złożysz deklarację o godz u góry, możesz
wywołać funkcję przed jej zdefiniowaniem, przed wdrożeniem.
Nazwy parametrów nie muszą być to samo, co zostało użyte w definicji funkcji.
Możesz mieć różne nazwy.
Kiedy wymawiam imiona, to one są identyfikatory danych.
Możesz zmienić nazwę pliku parametry w prototypie funkcji.
Nadal musisz mieć te same dane typy, ale możesz zmienić nazwy.
To zawsze dobra praktyka dołącz deklaracje funkcji
dla wszystkich funkcji w pliku program na początku pliku.
Dzięki temu Twój program jest bardziej spójny do projektu i zapobiega
błędom pojawiającym się na każdym etapie jeśli kiedykolwiek zechcesz wywołać tę
funkcję przed jej zaimplementowaniem.
Oto przykład niektóre prototypy funkcji.
Na samym szczycie plik, mamy nasze dołączenia.
A potem mamy trochę funkcje, które zadeklarowaliśmy, uśrednianie,
sumowanie i pobieranie danych.
Zauważasz, że wygląda po prostu jak nagłówek funkcji.
Ma typ zwrotu, ma parametry zdefiniowane
w funkcji, ale ma na końcu średnik.
Nie ma implementacji dla tych funkcji.
Po prostu mówisz kompilatorowi to jest funkcja istnieje i
tak jest zdefiniowana.
To, co pozwala ci to zrobić, jest teraz w swojej
głównej funkcji możesz wywołać średnią, możesz zadzwonić sumę, możesz zadzwonić po dane.
A rzeczywiste implementacje mogą bądź poniżej miejsca, do którego ich wzywasz.
Jeśli nie masz funkcji nagłówki tutaj, kiedy
próbowałeś wywołać je w głównym, jeśli były zdefiniowane poniżej głównej procedury, wystąpiłyby
błędy lub ostrzeżenia.
Więc spójrzmy w tym w blokach kodu.
Tutaj mamy naszą zwykłą główną rutynę.
Teraz powiedzmy, że chcemy aby utworzyć funkcję lub chcemy wywołać
funkcję.
Będziemy wywoływać funkcja o nazwie add i nie będzie
przyjmować żadnych parametrów.
Nazywamy to w naszym główna funkcja w linii 7.
Mamy zamiar wdrożyć go w linii 10.
Powiemy, że nieważne dodaj i nawet nic nie zrobimy.
Po prostu zostawimy to puste.
Kiedy idziemy to skompilować, co zauważysz, że ten kompilator daje
tylko ostrzeżenie.
Mówi, że add ma Deklaracja niejawna.
Możesz się pozbyć tego ostrzeżenia używając deklaracji funkcji.
Możesz zadeklarować funkcję do góry w zasadzie mówiąc kompilatorowi, że zamierzasz użyj
go gdzieś, ale nie wiesz,
gdzie jest implementacja.
Więc co możesz zrobić, to możesz powiedz void dodaj tutaj i
po prostu dodaj średnik.
Teraz się tego pozbędzie ostrzeżenie, a niektóre kompilacje będą faktycznie
powodować błąd.
Teraz, kiedy to kompiluję, mam bez ostrzeżeń i bez błędów.
Więc to jest funkcja deklaracja tak.
Pozwala na włożenie funkcja w dowolnym miejscu.
Teraz, jeśli nie masz tej funkcji deklaracja u góry i miałeś
implementację powyżej, gdzie ty wzywałeś go, to również nie zobaczysz błędu,
ponieważ kompilator będzie wiedział o funkcji, zanim faktycznie
spróbuje ją wywołać.
Więc jeśli to zbudujemy, ty też zobaczę, że nie ma błędu.
Teraz wspomniałem, że zwykle chcesz zadeklarować wszystkie swoje funkcje
na górze tylko dla dobrej praktyki i myślę, że musisz to zrobić.
Więc rób to dalej.
Ale jeśli się z tego wydostaniesz nawyk, musisz albo zadeklarować
swoje funkcje przed ich wywołaniem albo musisz
dostarczyć prototypy funkcji, ponieważ nie chcesz ostrzeżenia lub błędy w programie.
W ten sposób możesz zdefiniować plik function, iw ten sposób
możesz używać prototypów funkcji.
W następnym wykładzie będziemy
mówić o parametrach.
Jak możesz przekazać dane do funkcji.
Dziękuję Ci.