C jest uproszczonym językiem. Zapewnia dostęp do „niebieskiego metalu” (sprzętu). Nie ma nawet funkcji czytania z klawiatury ani pisania na ekranie. Jeśli tego potrzebujesz, powinieneś wdrożyć to sam.
Wszystko poza absolutnym minimum znajduje się w bibliotekach.
Znasz bibliotekę stdio. Obsługuje standardowe wejście i wyjście. Istnieją inne biblioteki matematyczne. Przetwarzanie ciągów. Działa z czasem. Istnieją po to, abyś nie musiał wymyślać koła na nowo za każdym razem, gdy rozpoczynasz nowy projekt.
Ale po co poprzestawać na tym, co zapewnia standard?
Umieszczenie kodu w bibliotekach sprawia, że można go ponownie wykorzystać. Pozwala to na podzielenie ogromnych programów na łatwe w zarządzaniu moduły. Łatwiej przetestować. Łatwiejsze debugowanie. Możesz pobrać kod ze starych projektów i wkleić go do nowych bez kopiowania i wklejania bloków logicznych.
Zobaczmy, jak to zrobić.
Ekstrakcja logiki do funkcji
Weźmy standardowy program w C, który wypełnia tablicę liczbami losowymi i je sortuje. Oto kod źródłowy:
Ten kod robi trzy rzeczy. Wypełnia tablicę liczbami losowymi. Sortuje je za pomocą sortowania bąbelkowego. Wyświetla wynik.
Aby utworzyć bibliotekę wielokrotnego użytku, musimy wyizolować logikę sortowania.
Krok pierwszy: uogólnianie sortowania
Wyodrębnij kod sortowania bąbelków. Zmień to w funkcję.
Ponieważ tablica a i stała MAX są globalne, funkcja początkowo nie potrzebuje parametrów. Nie powinna również zwracać wartości. Po prostu użyj zmiennych lokalnych dla x, y i t.
Teraz zaktualizuj main, aby wywołać tę funkcję zamiast wykonywać pętlę wbudowaną.
To działa. Ale nadal jest powiązany z tablicą globalną.
Krok drugi: przekazanie tablicy
Możemy sprawić, że funkcja sortowania będzie naprawdę uniwersalna. Przekaż samą tablicę jako parametr.
Podpis zmieni się na:
Mówi to kompilatorowi, aby zaakceptował tablicę liczb całkowitych o dowolnym rozmiarze. Ciało funkcji pozostaje dokładnie takie samo. Wystarczy zaktualizować wywołanie w main :
Zauważyłeś coś dziwnego? Podajemy a zamiast &a.
Mimo że funkcja sortowania modyfikuje tablicę, nie potrzebujemy tutaj operatora get adres. Wydaje się to sprzeczne z intuicją, jeśli jesteś przyzwyczajony do języków przekazujących wartości. Możesz się zastanawiać, dlaczego to działa bez jawnego użycia wskaźników w wywołaniu.
Dzieje się tak, ponieważ w C tablice stają się wskaźnikami po przekazaniu do funkcji. Funkcja otrzymuje w pamięci odwołanie do początku tablicy. Dlatego może zmienić oryginalne dane.
Zrozumienie tej różnicy jest kluczem do opanowania wskaźników. Bez tego biblioteki C są po prostu statycznymi blokami kodu. Dzięki niemu budujesz modułowe, przenośne systemy.























