User Tools

Site Tools


dydaktyka:cprog:2016:intro

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dydaktyka:cprog:2016:intro [2016/08/29 15:16]
pkleczek [Hello world!]
— (current)
Line 1: Line 1:
-====== Wprowadzenie do C ====== 
  
-===== Cel laboratorium ===== 
- 
-  * Zapoznanie z językiem C na przykładzie prostego programu //"​Hello world!"//​. 
-  * Zapoznanie ze zintegrowanym środowiskiem programistycznym (IDE). 
-  * Omówienie procesu zamiany kodu w języku C na kod zrozumiały dla komputera. 
-  * Znajdowanie i usuwanie błędów składniowych kodu. 
- 
-===== Podstawowe fakty===== 
- 
-  * Język C to język wysokiego poziomu, czyli jednej instrukcji w kodzie odpowiada wiele instrukcji dla procesora (w przeciwieństwie do języka niskiego poziomu, jak asembler, gdzie każdej instrukcji ​ kodzie odpowiada dokładnie jedna instrukcja dla procesora). 
-  * Język C wymaga kompilatora (dedykowanego dla danego systemu operacyjnego). 
-  * Istnieją trzy standardy języka (K&R, ANSI, C99). Standard definiuje dopuszczalne konstrukcje języka i ich działanie. \\ :!: Na laboratoriach omawiamy standard ANSI. 
-  * Filozofia C: //Zaufaj programistom – oni dobrze wiedzą, co robią!// \\ 
-W języku C wiele konstrukcji jest dopuszczalnych,​ a "​wielka moc to wielka odpowiedzialność!"​ -- programista musi zachować czujność :-) 
- 
-===== Hello world! ===== 
- 
-<file c hello_world.c>​ 
-/* Nasz pierwszy program w jezyku C. */ 
- 
-#include <​stdio.h>​ 
- 
-int main(void) { 
- /* Funkcja printf() wypisuje dane w konsoli... */ 
- printf("​Hello world!\n"​);​ 
- return 0; 
-} 
-</​file>​ 
- 
-==== Komentarze ==== 
- 
-  * tekst ograniczony kombinacjami znaków ''/​* ... */''​ (zakres) bądź ''<​nowiki>//</​nowiki>''​ (od tego miejsca do końca wiersza) 
-  * ignorowany przez kompilator 
-  * przydatny dla programistów,​ aby opisać zachowanie programu i jego fragmentów,​ założenia i oczekiwania co do jego działania itp. \\ (można uniknąć sytuacji (po miesiącu): //"a co ja tutaj chciałem zrobić?"//​ -- i spędzenia pół godziny na rozgryzaniu paru linijek programu) 
- 
-Przykład: 
- 
-<code c> 
-// Komentarz w jednej linii 
-instrukcje; 
-/* Komentarz w 
-   kilku liniach */ 
-</​code>​ 
- 
-==== Derektywa #include ==== 
- 
-<code c> 
-#include <​stdio.h>​ 
-</​code>​ 
- 
-  * ''#​include''​ to derektywa preprocesora. Preprocesor wykonuje czynności przygotowawcze przed właściwą kompilacją. 
-  * ''​stdio.h''​ oznacza plik nagłówkowy standardowego wejścia wyjścia (ang. standard input-output) i zawiera głównie makra i funkcje do obsługi komunikacji programu z konsolą (wypisywanie na ekran, pobieranie danych z klawiatury) oraz pracy z plikami. \\ Funkcje wejścia i wyjścia nie są wbudowane, gdyż nie wszystkie programy z nich korzystają,​ a częścią filozofii C jest unikanie tego, co zbędne. 
-  * Plik nagłówkowy (''​.h''​ = header file) to zbiór makropoleceń,​ funkcji i stałych przygotowany przez (innych) programistów i gotowych do użytku przez nas. 
- 
-==== Funkcja main() ==== 
- 
-**Funkcja** to logiczny fragment programu, odpowiedzialny za wykonanie pewnego ciągu operacji. 
- 
-Funkcja w języku C przypomina trochę funkcję matematyczną -- też może przyjmować argumenty i zwracać wartość... ale nie musi! 
- 
-<code c> 
-int main(void) { 
-    // instrukcje... 
-    return 0; 
-} 
-</​code>​ 
- 
-Funkcja ''​main()'':​ 
-  * "​główna"​ funkcja: specjalna funkcja w języku C (każdy program musi mieć dokładnie jedną funkcję main()) 
-  * komputer zawsze zaczyna wykonywanie programu od funkcji main() 
-  * program kończy działanie z chwilą opuszczenia funkcji main() 
-  * ''​%%return 0;​%%''​ oznacza zwrócenie przez funkcję wartości ''​0''​ \\ (Gdzie? Do miejsca, w którym funkcja została wywołana, czyli w tym przypadku do systemu operacyjnego. Wartość ''​0''​ oznacza, że wszystko poszło OK.) 
- 
-==== Funkcja printf() ==== 
- 
-<code c> 
-    printf("​Hello world!"​);​ 
-</​code>​ 
- 
-  * funkcja biblioteczna (z biblioteki ''​stdio''​) 
-  * wypisuje dane w konsoli ("na ekran"​) 
-  * ''​\n''​ -- kombinacja znaków interpretowana jako znak nowego wiersza 
- 
-**Uwaga!** W języku C wielkość liter ma znaczenie, tzn. nazwy ''​printf''​ i ''​Printf''​ oznaczają dwie różne funkcje! 
- 
-===== Kompilacja i konsolidacja ===== 
- 
-**Kompilacja.** Proces przetwarzania kodu źródłowego i plików nagłówkowych na kod przejściowy (przez kompilator). 
- 
-**Konsolidacja.** Proces łączenia kodu przejściowego z pozostałym kodem (kodem startowym i kodem bibliotek) w celu utworzenia pliku wykonywalnego. Konsolidacją zajmuje się //​konsolidator//,​ zwany też //​linkerem//​ (linker). 
- 
-W wyniku procesu kompilacji i konsolidacji powstaje plik binarny, zawierający kod maszynowy. 
- 
- 
-{{ :​dydaktyka:​cprog:​2015:​compile_and_link.jpg?​nolink |}} 
- 
- 
-Etapy tworzenia pliku wykonywalnego:​ 
-  - Programista pisze kod źródłowy programu (jako pliki tekstowe). 
-  - Preprocesor dołącza pliki nagłówkowe i przeprowadza inne czynności przygotowawcze,​ a następnie generuje plik kodu obiektowego (object file, ''​.obj''​ pod Windowsem). Plik kodu obiektowego zawiera kod przejściowy,​ czyli taki, w którym brakuje: 
-    * kodów funkcji bibliotecznych 
-    * kodu startowego (odpowiada za uruchomienie na danym systemie operacyjnym) 
-  - Linker dokonuje konsolidacji,​ czyli dołącza standardowe biblioteki oraz ewentualne biblioteki stworzone przez użytkownika (a dokładniej gotowy kod binarny użytych funkcji bibliotecznych) i tworzy plik gotowy do wykonania (''​.exe''​ pod Windowsem). 
- 
-**Uwaga!** Pliki binarne ''​.obj''​ i ''​.exe''​ są przeznaczone dla danego systemu operacyjnego i dla danej architektury komputera. Aby stworzyć program dla innego systemu trzeba dokonać ponownej konsolidacji,​ z innymi parametrami. 
- 
-===== Zintegrowane środowisko programistyczne ===== 
- 
-Co jest potrzebne, żeby zacząć programować?​ -- Wystarczy edytor tekstu i kompilator języka C! 
- 
-//ale...// 
- 
-Proces tworzenia programu można znacznie uprościć korzystając ze zintegrowanego środowiska programistycznego (integrated development environment,​ IDE). 
- 
-Główne funkcje IDE: 
-  * wbudowany edytor tekstu pod kątem języka programowania 
-    * kolorowanie składni 
-    * podpowiadanie 
-  * automatyczna kompilacja i linkowanie 
-  * debugger 
- 
-===== Tworzenie projektu w Code:Blocks ===== 
- 
-  - Otwórz aplikację Code:​Blocks. 
-  - Wybierz z menu: //File -> New -> Project...//​ 
-  - Zaznacz typ projektu -- //Console application//​. 
-  - Wybierz //C// jako język projektu. 
-  - Wybierz tytuł projektu oraz katalog, w którym projekt zostanie on utworzony. 
-  - Zatwierdź przyciskiem //Finish//. 
-  - Po utworzeniu projektu w bocznym panelu rozwiń element //Sources// i kliknij na element z nazwą zakończoną na //.c// -- plik z **kodem źródłowym** naszego programu. 
- 
-Plik z kodem powinien wyglądać następująco:​ 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int main() 
-{ 
-    printf("​Hello world!\n"​);​ 
-    return 0; 
-} 
-</​code>​ 
- 
-Aby uruchomić program, wybierz z menu: //Build -> Build and run// 
- 
-Pojawi się okno **konsoli**,​ w którym wyświetlony zostanie napis: ''​Hello world!''​ (wraz ze statystykami wykonania programu) 
- 
-===== Błędy i ostrzeżenia (podczas kompilacji lub linkowania) ===== 
- 
-Spróbuj skompilować poniższy kod: 
-<code c hello_world_errors.c>​ 
-#include <​stdlib.h>​ 
- 
-int ain() 
-{ 
-    printf("​Hello world!\n"​) 
-    return 0; 
-} 
-</​code>​ 
-Co się stało? 
- 
-  * //​Błądzenie jest rzeczą ludzką// -- kompilator często pomoże nam wykryć błędy (pot. bugs). 
-  * Kompilator wykrywa błędy składniowe (syntax errors), czyli niezgodności ze specyfikacją i standardami języka. Natomiast nic nie obchodzą go błędy semantyczne (semantic errors), czyli poprawność od strony logicznej -- czy programista napisał faktycznie to, co chciał osiągnąć. 
-    * Przykład 1: W języku polskim zdanie w stylu mistrza Yody //Błędy frustrować być mogą!// składa się z poprawnych słów, ale w złym szyku i nie zawsze dobrze dobranych -- to błąd składniowy. Z kolei zdanie //Włochata inflacja myśli na zielono.// zawiera błąd semantyczny (no chyba, że ktoś jest poetą\textellipsis) 
-    * Przykład 2: ''​n2 = n * n; n3 = n2 * n2;''​ -- błąd semantyczny,​ gdyż ''​n3''​ miało być sześcianem,​ a wyszła czwarta potęga. 
-  * Wszystkie błędy zgłoszone przez kompilator i linker muszą być poprawione. 
-  * Błąd uniemożliwia działanie programu; ostrzeżenie sygnalizuje możliwe problemy (program jest poprawny, ale być może np. użyliśmy konstrukcji nie należącej do standardu języka i dlatego część kompilatorów może nie potrafić skompilować naszego kodu). 
- 
- 
-Dobre praktyki: 
- 
-  * W pierwszej kolejności usuwamy błędy (w kolejności jak się pojawiają – od pierwszej linii pliku do ostatniej), a dopiero potem zajmujemy się ostrzeżeniami. 
-  * Czytać opisy błędów! (Na tym etapie zajęć) Zazwyczaj to wystarczy, by zorientować się jak je usunąć. 
- 
----- 
- 
-Aby ułatwić sobie pracę, z menu wybierz //Settings > Compiler...//,​ a następnie na karcie //Compiler settings// i podkarcie //Compiler Flags// zaznacz pole: 
-  * Enable warnings demanded by strict ISO C and ISO C++ [-pedantic] 
- 
-W ten sposób kompilator ostrzeże cię, gdy w kodzie znajdą się elementy niezgodne ze standardem ANSI C. 
- 
- 
- 
- 
-===== Zadania ===== 
- 
-Zapoznaj się z: 
-  * zasadami tworzenia czytelnego kodu: **[[dydaktyka:​cprog:​clean_code|(klik)]]** 
-  * dostępnymi materiałami dydaktycznymi:​ **[[dydaktyka:​cprog:​learning_resources|(klik)]]** \\ //(chodzi o to, aby kojarzyć gdzie ewentualnie szukać wiedzy i pomocy)// 
dydaktyka/cprog/2016/intro.1472476573.txt.gz · Last modified: 2020/03/25 11:46 (external edit)