Wyklad-C-Intro.pdf

(583 KB) Pobierz
Programowanie w języku C
Kurs początkowy
Dr inż. Lucjan Miękina
upel.agh.edu.pl/wimir/login/
Katedra Robotyki i Mechatroniki
28 listopada 2016
1/58
Język C: Inżynieria oprogramowania
Proces tworzenia oprogramowania w sposób systematyczny można przedstawić jako
składający się z następujących etapów:
1
Sformułowanie wymagań dla programu lub systemu
2
Analiza wymagań i sformułowanie specyfikacji funkcjonalnej i strukturalnej
systemu
Projekt systemu, obecnie najczęściej w języku UML (Unified Modeling
Language), w wyniku czego powstaje
model
systemu
Implementacja, najczęściej w języku/ach wysokiego poziomu (C, C++, Java,
Scala)
Walidacja i testowanie, szacunkowo 20-50 (a nawet 60) % nakładów dla dużych
projektów
Wdrażanie
Pielęgnacja i rozwój.
3
4
5
6
7
Etapy te są wykonywane kolejno, w idealnym przypadku jednokrotnie, ale w praktyce
występuje konieczność powrotu do etapów wcześniejszych, aby skorygować błędy
(modelu, implementacji, testów).
Podejście zwane RUP (Rational Unified Process) definiuje model
iteracyjno-przyrostowy
budowy oprogramowania.
2/58
Język C: Geneza języka
Język C został stworzony przez Dennisa Ritchie (Bell Labs), początkowo dla celów
związanych z rozwijaniem systemu UNIX (był językiem programowania systemowego).
Następnie został zastosowany do bardziej uniwersalnych zadań i stał się językiem
tworzenia oprogramowania użytkowego w wielu innych systemach operacyjnych, m.in.
Linux, Windows. Charakteryzuje się tym, że
generuje bardzo zoptymalizowany kod
wynikowy,
pomimo że jest
językiem wysokiego poziomu.
Literatura:
[1] [2]
Kernighan B. i Ritchie D.
Język ANSI C: Programowanie, Wydanie 2.
Helion, 2010.
Tondo C. i Gimpel S.
Język ANSI C: Programowanie.Ćwiczenia.
Helion,
2010.
Link:
https://www.bell-labs.com/usr/dmr/www/
- strona Dennis-a Ritchie
Język C++ został stworzony przez Bjarne Stroustrup’a i może być traktowany jako
rozszerzenie obiektowe języka C. Zostało to osiągnięte dzięki wprowadzeniu szeregu
nowych słów kluczowych, przy zachowaniu dotychczasowych konstrukcji,
udostępnianych przez język C. C++ jest więc nadzbiorem języka C.
Link:
http://www.stroustrup.com
- strona Bjarne Stroustrup’a
3/58
Język C: Struktura programu
Program w języku C składa się z jednego lub więcej oddzielnie kompilowanych
modułów
(plików) źródłowych. Każdy z plików źródłowych jest kompilowany do pliku
zawierającego
kod pośredni
(object
code).
Następnie wszystkie te pliki są łączone
przez
program łączący
(tzw.
linker
) w program wykonywalny.
Kolejne etapy przetwarzania tekstu źródłowego programu:
1
program
preprocesora,
który przetwarza znajdujące się w tekście programu
dyrektywy preprocesora
(np.
#define, #include,
itp.)
2
pierwszy etap kompilacji programu, po zakończeniu którego otrzymujemy tzw.
kod pośredni
kompilatora języka C. Postać tego kodu jest identyczna we
wszystkich systemach UNIX
zamiana kodu pośredniego na tekst programu w asemblerze
tłumaczenie programu w asemblerze na kod maszynowy
łączenie otrzymanego kodu maszynowego z funkcjami bibliotecznymi, w wyniku
czego otrzymujemy wykonywalny program w kodzie maszynowym.
3
4
5
Dzięki dwuprzebiegowej kompilacji można uzyskać dodatkową płaszczyznę
przenośności. Wspólny dla różnych wersji systemu UNIX format kodu pośredniego,
pozwala w przypadku języków wysokiego poziomu innych niż C (np. Fortran, Pascal,
Ada) uniknąć generowania kodu maszynowego. Generują one jedynie kod pośredni,
który następnie jest tłumaczony na kod maszynowy.
4/58
Język C: Struktura programu
Program w języku C składa się z tzw.
funkcji,
które są zdefiniowane na
poziomie
globalnym
(są globalne).
Funkcja
Funkcja jest częścią programu (podprogramem), realizującą pewne zadanie.
Funkcje programu mogą być zdefiniowane w jednym lub więcej plikach
źródłowych, będących
zwykłymi plikami tekstowymi.
Każdy
program musi zawierać
funkcję o nazwie
main,
od której rozpoczyna się
wykonanie programu. Funkcja
main
może być umieszczona w dowolnym miejscu
kodu, ale
poza innymi funkcjami.
Do programu można dołączać pliki zawierające
nagłówki
(deklaracje) funkcji
zdefiniowanych w innych plikach lub funkcji systemowych. Dokonuje się tego za
pomocą dyrektywy
#include <nazwa_pliku>.
W poniższym przykładzie
dołączono plik
stdio.h,
który zawiera nagłówki standardowych funkcji
wejścia/wyjścia. Jedną z nich jest funkcja
printf
służąca do wypisywania wartości
danych różnych typów na standardowym wyjściu.
Każda instrukcja w języku C musi być zakończona średnikiem ’;’. Instrukcje
składające się na kod funkcji umieszcza się w nawiasach klamrowych
{}.
Nawiasy
{}
są również ogranicznikami tzw.
bloku,
który składa się z deklaracji
zmiennych lokalnych i jednej lub więcej instrukcji (odpowiednik instrukcji
złożonej w wielu językach).
UWAGA: Duże i małe litery w języku C są rozróżniane.
5/58
Zgłoś jeśli naruszono regulamin