1. Zaczynamy: pierwszy program - majsylw/Introduction-to-programming-in-C GitHub Wiki

Pierwsze kroki

Na zajęciach poświęconych programowaniu będziemy pisać programy, czyli pewnego rodzaju aplikacje będące listą szczegółowych instrukcji przekazywanych komputerowi będących przepisem na to jak zrealizować określone zadanie. Zadania te mogą być różne, poczynając od najprostszego programu, który wyświetli na ekranie konsoli (wyskakującym czarnym okienku) napis Hello, World!, po bardziej skąplikowane pozwalające na interakcję z uzytkownikiem (np. wpisywanie liczb z klawiatury), aby wykonać odpowiednie operacje na wprowadzonych przez niego danych. Tego typu programy nauczysz się pisać na tych zajęciach. Ale zanim do tego przejdziemy musimy wyposażyć się w pewne narzędzia. I o tym będziemy mówić w tym rozdziale.

Instalacja

Zanim zaczniemy kodować musimy zainstalować na naszym komputerze odpowiednie programy:

  • kompilator języka C - program który tłumaczy kod źródłowy napisany przez nas do postaci zrozumiałej dla komputera (maszyny cyfrowej), czyli do postaci ciągu zer i jedynek które sterują pracą poszczególnych elementów komputera; dodatkowo (najczęściej) wraz z kompilatorem dostarczany jest linker, czyli kolejny program uruchamiany na skompilowanych plikach źródłowych (napisanych przez nas) oraz innych funkcjach bibliotecznych, z których korzystaliśmy (np. funkcji printf(), scanf()), jego zadaniem jest połaczenie wszystkiego w jedną działającą całość;
  • edytor tekstowy, a właściwie aby programowało nam się trochę łatwiej, to będziemy korzystać ze zintegrowanego środowiska programistycznego (ang. integrated development environment, IDE, w naszym przypadku będzie to Code::Blocks -wieloplatformowe darmowe środowisko programistyczne o otwartym kodzie źródłowym dla programistów C, C++ i Fortrana).

Kompilator wraz ze środowiskiem można pobrać z oficjalnej strony www.codeblocks.org. Aby pobrać program przechodzimy w zakładkę "Downloads" i wybieramy pierwszą opcję na stronie "Download the binary release". Następnie zjeżdżamy w dół strony i wybramy codeblocks-17.12mingw-setup.exe. Jak możemy przeczytać poniżej w notatce, jest to taka wersja instalatora dla środowiska Code::Blocks, która jednocześnie posiada kompilator GCC/G++ i debugger GDB.

Następnie przechodzimy przez proces instalacji. Uwaga opisana powyżej ścieżka instalacyjna dotyczy systemu operacyjnego Windows XP//Vista//7//8.x//10. Jeśli nie dysponujesz tego typu środowiskiem, poszukaj na stronie instalatora, który będzie dla Ciebie odpowiedni.

Uruchomienie środowiska Code::Blocks

Korzystając ze zintegrowanego środowiska programistycznego Code::Blocks możemy tworzyć pojedyncze skrypty, jak i projekty. Po przeprowadzeniu poprawnej instalacji i uruchomienu programu, naszym oczom powinen ukazać się taki oto obrazek: To standardowy układ zakładek w owym środowisku. Na samym środku znajduje się nasz główny obszar roboczy - miejsce, gdzie będziemy otwierać pisane przez nas skrypty. Po lewej stronie w panelu Projects będziemy mieli wgląd w aktualnie otwarte przez nas projekty, natomiast na samym dole w panelu Logs&others będzemy mieli możliwość śledzenia procesu kompilacji - otrzymamy tam informację na temat tego, czy przeszła ona pomyślnie, czy jednak pojawiły się jakieś błędy (ang. errors) lub ostrzeżenia (ang. warnings), oraz, w której dokładnie linijce naszego programu wystąpiły. Aby utworzyć nasz pierwszy skrypt, czyli plik z rozszerzeniem *.c, z menu głównego wybieramy "File", a następnie "New" i "Empty file". Wpiszmy następujący kod w nowo utworzony plik:

#include<stdio.h>

int main(){
    printf("Hello world!");
    return 0;
}

i zapiszmy go (albo wybierając kolejno File -> Save File lub kombinację klawiszową Ctrl+S) jako witaj_swiecie.c. Za chwilę omówimy składowe powyższego skryptu, ale na początek sprawdźmy jaki jest efekt jego działania. W tym celu naciśij klawisz F9 lub wybierz z menu Build -> Build and run (tym poleceniom odpowiada także ikonka koła zebatego schowanego za zieloną strzałką w menu poniżej). Ostatecznie powinno wsykoczyć okienko, w którym pojawi się napis Hello world!.

Skoro nasza ciekawość została zaspokojona i wiemy już, że nasz program działa. Czas zrozumieć poszczególne składowe kodu. Nasz program to skrypt napisany w języku C. Jeśli uruchamiając program skorzystaliście z opcji wyboru z menu głownego Build z pewnością zauważyliście oprócz opcji Build and run także warianty Build (samo koło zębate) oraz Run (sama zielona strzałka). Jeszcze nie wiesz co oznaczają te magiczne słowa. Napisany przez kod musiał zostać skompilowany przy pierwszym uruchomieniu, do czego służy opcja build, co w dużym uproszczeniu oznacza tyle, że aby uruchomić program na posiadanym urządzeniu musimy najpier go 'zbudować' - efektem końcowym jest pojawienie się w tym samym folderze, co utworzony przez nas skrypt pliku wykonywalnego (pod Windowsem będzie to plik z rozszerzeniem .exe). Dopiero w kolejnym kroku zbudowany program możemy uruchomić, do czego służy opcja Run. Teraz już zapewnie rozumiecie dlaczego przy pierwszym uruchomieniu programu skorzystaliśmy z wariantu Build and run - aby zarówno zbudować program (skompilować go), jak i uruchomić.

Przechodząc teraz do napisanego kodu. Skrypt otwieramy instrukcją #include <stdio.h, co jest równoważne z załączeniem do naszego kodu funkcji dostępnych w standardowej bibliotece wejścia-wyjścia - pozwalających między innymi na: wypisywanie danych na ekranie monitora (standardowe wyjście) oraz pobieranie danych z klawiatury (standardowe wejście). Utworzenie definicji funkcji main() w języku C jest obligatoryjne - każdy skrypt główny programów, które będziemy tworzyć będzie się od niego rozpoczynał, a wykonaniem programu w rzeczywistości będzie wykonanie funkcji main(), a wiec wszystkich instrukcji, które się wewnatrz niej znalazły. Bezpośrednio za napisem main() znajduje się otwierający nawias klamrowy { wyznaczający początek funkcji, koniec funkcji wyznacza zamykający nawias klamrowy }. Wszystko, co znajduje się pomiędzy tymi nawiasami klamrowymi jest wnętrzem funkcji main(). Więcej o funkcjach dowiemy się na kolejnych zajęciach. Teraz jeszcze skoncentrujemy się na sinstrukcjiach zawartych we wnętrzu funkcji main, czyli na linijce printf("Hello world!"). printf() to funkcja wypisująca podany komunikat (w naszym przypadku “Hello world!”) na tzw. standardowe wyjście. Zazwyczaj oznacza to po prostu konsolę, w której kazaliśmy wykonać nasz program. Ostatnia linijka return 0 wiążę się z napisem (a właściwie typem danych), który został zamieszczony przed słowem "main". Zapowiedzieliśmy w tamtym miejscu, że funkcja main zwróci liczbę całkowitą (int). Realizację tej obietnicy zapewnia nam instrukcja return 0, co oznacza zwróć wartość 0. Jak się teraz przypatrzysz komunikatowi wyświetlonemu w konsoli zobaczysz tam napis "Process returned 0", co oznacza tyle, że program zakończył się poprawnie, a funkcja main() zwróciła wartość 0, czyli tak jak zapisaliśmy w naszym kodzie.

Na koniec zwróćmy jeszcze uwagę na jeden ważny szczegół: średniki (;). Każda instrukcja (linijka) zapisana w języku C musi zostać zakończona znakiem ;, brak średnika równoznaczny jest zbłędem, a napisany przez nas program się nie skompiluje i ostatecznie nie będzie mógł zostać wykonany. Warto także stosować wcięcia, czli odpowiednią liczbę spacji poprzedzająca kod we wnętrzu funkcji, np. funkcji main(). Kod powinno wcinać się w każdej konstrukcji językowej: funkcji, instrukcji warunkowej, pętli itp. Wcięcia “kumulują się” wraz z zagnieżdżaniem takich konstrukcji. Spójna liczba wcięć zapewnia większą czytelność kodu.

Jeśli czytelniku dotrwałeś do tego momentu: Gratulacje, udało Ci się stworzyć swój pierwszy program w języku C :-)

⚠️ **GitHub.com Fallback** ⚠️