!"" ' #$$$%&' ()*$+&',! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.



Podobne dokumenty
Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

!"# %!*%+,-.! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

%$-,./+,-.0! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Proces tworzenia programu:

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wstęp do Programowania, laboratorium 02

Programowanie Proceduralne

1. Wprowadzenie do C/C++

1. Wprowadzenie do C/C++

Podstawy Programowania.

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wprowadzenie do kompilatorów

Podstawy Programowania

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Sposoby przekazywania parametrów w metodach.

Kompilacja image z CVS

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Zmienne, stałe i operatory

Podstawy programowania C. dr. Krystyna Łapin

Wstęp do programowania

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

2 Przygotował: mgr inż. Maciej Lasota

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Tworzenie oprogramowania

Wydział Elektrotechniki, Informatyki i Telekomunikacji. Instytut Informatyki i Elektroniki. Instrukcja do zajęć laboratoryjnych

Wstęp. do języka C na procesor (kompilator RC51)

Laboratorium 1. I. Zainstaluj program Eclipse (wersja C/C++ w odpowiednim systemie operacyjnym

Podział programu na moduły

Programowanie obiektowe i C++ dla matematyków

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Tworzenie oprogramowania

Argumenty wywołania programu, operacje na plikach

.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.

Utworzenie pliku. Dowiesz się:

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Języki i metodyka programowania. Wprowadzenie do języka C

Wprowadzenie do środowiska Qt Creator

Wstęp do programowania. Wykład 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Konsolidacja (linking)

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Fragment wykładu z języka C ( )

/*W tym miejscu funkcja system wywołuje systemową komendę PAUSE tj.czeka tak długo, aż zostanie wciśnięty dowolny znak z

W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

... Ireneusz Mrozek. Wydział Informatyki

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Kompilacja i scalanie programów w linii poleceń gcc i make

Przegldanie stron wymaga odpowiedniej mikroprzegldarki w urzdzeniu mobilnym lub stosownego emulatora.

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Deklaracje. W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Podstawy informatyki

Kompilowanie programów

Planowanie adresacji IP dla przedsibiorstwa.

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Laboratorium 2: Biblioteki statyczne i dynamiczne w języku C. mgr inż. Arkadiusz Chrobot

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Systemy operacyjne laboratorium 3 Paweł Gmys strona 1

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Systemy Operacyjne - Operacje na plikach

RODOWISKO DEV-C++ Wymagania sprz towe (zalecane): - Microsoft Windows 2000, XP - 32 MB RAM MHz Intel compatible CPU, 200 MB free disk space

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Zastosowanie programu Microsoft Excel do analizy wyników nauczania

Programowanie niskopoziomowe

Errata. Instalacja sklepu internetowego

Proste algorytmy w języku C

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

{Opracowała Małgorzata Roguska} Tematy lekcji:

Piotr Dwieczkowski. Code coverage. Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Co nie powinno być umieszczane w plikach nagłówkowych:

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Języki i metody programowania I

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Informatyka I: Instrukcja 4.2

!! "#! *&!'! & '!# 2&&! () &

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Materiały wprowadzające. dr inż. Arkadiusz Chrobot

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Podstawy programowania w C++

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

! 3% !"# Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Laboratorium 0: System Linux, edytor vim i kompilator gcc. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Programowanie komputerowe. Zajęcia 1

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Functionalization. Jeszcze o funkcjach i strukturze projektu. Marcin Makowski. 3 grudnia Zak lad Chemii Teoretycznej UJ

Transkrypt:

!"" "! "#$%&$ ' #$$$%&' ()*$+&',! (" " $! #)' -$$!.$$/)$! 01 021! 3$ Czcionka o stałej szerokoci Nazwy programów, polece, katalogów, wyniki działania wydawanych polece. Czcionka o stałej szerokoci pogrubiona Podaje tekst, który naley dosłownie przepisa. W przypadku plików ródłowych wyrónia istotniejsze fragmenty. Czcionka o stałej szerokoci kursyw Tekst komentarza w przykładowych sesjach przy terminalu. Czcionka o stałej szerokoci kursyw pogrubiona Wyrónia istotniejsze fragmenty wyników działania wydawanych polece. "! ')$ Celem wiczenia jest zapoznanie studenta z podstawami pracy z kompilatorem GNU cc (gcc), który de facto jest standardem we wszystkich dystrybucjach systemu LINUX. Praca z nim nie jest specjalnie trudna (przynajmniej do czasu, gdy nie musimy uywa jego bardzo zaawansowanych moliwoci), jednak wymaga poznania paru podstawowych jego elementów. opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 1

Przede wszystkim naley uwiadomi sobie (i to zaakceptowa), e praca z tym kompilatorem odbywa bdzie si wyłcznie w trybie tekstowym. Innymi słowy wszystkie polecenia bd wydawane wprost z konsoli systemowej. Poniewa zwykle ilo tych polece jest do dua, niemal zawsze bdziemy posługiwa si programem make ułatwiajcym tworzenie bardziej złoonych aplikacji. Praca z programem make bdzie tematem jednego z kolejnych laboratoriów. Na pocztek moemy spokojnie obej si bez tego narzdzia. 4! 3$$)$) Najprostszy program w jzyku C moe mie nastpujc klasyczn posta (uwaga: numery poszczególnych linii nie s czci kodu ródłowego. Umieszczono je wyłcznie w celu łatwiejszego odwoływania si do niego): 1 #include<stdio.h> 2 int main(void) 3 4 printf("hello, world!\n"); 5 return(0); 6 Zadaniem powyszego programu jest, jak pewnie nie trudno si domyle, wywietlenie napisu Hello, world! na ekranie komputera. W linii 1 umieszczono tzw. dyrektyw #include, która zleca dołczy w czasie kompilacji programu zawarto tzw. pliku nagłówkowego o nazwie stdio.h (tam zawarta jest min. definicja funkcji standardowej printf i wiele, wiele innych informacji. Warto choby pobienie zapozna si z jego zawartoci, cho prawdopodobnie na pocztku wikszo jego zawartoci bdzie dla nas kompletnie nieczytelna). W linii 2 umieszczona jest deklaracja funkcji main. W kadym pliku ródłowym w jzyku C musi istnie przynajmniej jedna funkcja i musi ona nazywa si main. Napis int oznacza, e funkcja zwraca bdzie liczb (zmienn) typu całkowitego, natomiast napis void oznacza, e funkcja nie otrzymuje z zewntrz adnych parametrów. W liniach 3-6 znajduje si ciało funkcji main. Wewntrz niej znajduje si standardowa funkcja o nazwie printf, której zadaniem jest wywietlenie na ekranie podanego jako jej argument napisu. Znaki sterujce \n nakazuj po wywietleniu napisu ustawi kursor w nowej linii. Po wywietleniu napisu funkcja koczy działanie i zwraca do rodowiska wywołujcego warto 0, co zwykło si interpretowa jako poprawne zakoczenie działania programu. Aby skompilowa powyszy program wydajemy polecenie: $ gcc hello.c W wyniku otrzymujemy skompilowany plik o nazwie a.out. Gdy chcemy, aby plik wynikowy miał inn nazw (a zwykle tak chcemy), wówczas wydajemy polecenie kompilacji w takiej jak poniej postaci: $ gcc hello.c o hello Wówczas powstanie plik wynikowy o nazwie hello (bez typowego dla systemów DOS / Windows rozszerzenia.exe cho nic oczywicie nie stoi na przeszkodzie, aby takie rozszerzenie nada plikowi wynikowemu. W rodowiskach UNIX nie jest to jednak praktykowane). opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 2

Uwaga: Ostatnia linia w pliku ródłowym MUSI by poprawnie zakoczona, tzn. ostatnim znakiem musi by znak koca linii (LF ang. line feed, kod ASCII 0A). Gdy bdzie inaczej kompilator wygeneruje ostrzeenie: $ gcc hello.c -o hello hello.c:6:2: warning: no newline at end of file Poprawny plik ródłowy Hello world (ogldany jako kody szesnastkowe) bdzie wygldał wic jak poniej. Znak koca linii, o którym mowa wyej, został powikszony i wytłuszczony: 2369 6E63 6C75 6465 3C73 7464 696F 2E68 #include<stdio.h 3E0A 696E 7420 6D61 696E 2876 6F69 6429 >.int main(void) 0A7B 0A70 7269 6E74 6628 2248 656C 6C6F..printf("Hello 2C20 776F 726C 6420 215C 6E22 293B 0A72, world!\n");.r 6574 7572 6E28 3029 3B0A 7D0A eturn(0);.. O tym, e plik powstał moemy przekona si wydajc polecenie ls l systemu operacyjnego. Zwrómy uwag na atrybut x tego pliku. Oznacza on, e plik jest wykonywalny (ang. executable). Aby uruchomi skompilowany włanie program wydajemy nastpujce polecenie: $./hello Hello, world! (uwaga: kropka oznacza, e chcemy wykona program znajdujcy si w katalogu biecym. Bez tej kropki system, operacyjny bdzie poszukiwał wskazanego pliku w katalogach zapisanych w zmiennej systemowej $PATH a to w niektórych sytuacjach moe by bardzo grone. Czy domylasz si dlaczego?). Kompilujc program kompilatorem gcc moemy poda kompilatorowi róne szczegółowe informacje w jaki sposób ma kompilowa nasze programy. Informacje te podajemy w formie tzw. przełczników kompilatora. Ich pełen opis zajmuje kilkanacie stron w dokumentacji (patrz polecenie man gcc lub http://gcc.gnu.org). Poniej podajemy tylko kilka przykładowych opcji: -Ikatalogu -Lkatalogu -lcostam -Wall -w -pedantic -pedanticerrors -werror wstawia katalog na pocztek listy katalogów, które kompilator bdzie przegldał w poszukiwaniu plików nagłówkowych wstawia katalog na pocztek listy katalogów, które kompilator bdzie przegldał w poszukiwaniu bibliotek dołcza bibliotek o nazwie libcostam. Uwaga: w systemach z rodziny UNIX przyjło si, e biblioteki maj nazwy rozpoczynajce si od słowa lib. Wobec tego, gdy napiszemy lcostam kompilator gcc bdzie szukał na dysku pliku o nazwie libcostam.a lub libcostam.so. Rozszerzenia.a oraz.so s standardowymi rozszerzeniami bibliotek w systemie UNIX i uywajc przełcznika l nie podajemy ich jawnie wywietla wszystkie ostrzeenia kompilatora gcc wyłcza wszystkie ostrzeenia kompilatora. Uywanie tej opcji nie jest zalecane. Wywietla wszystkie ostrzeenia wymagane przez ANSI C Wywietla wszystkie błdy wymagane przez ANSI C ostrzeenia zamienia na błdy, zatrzymujc kompilacj opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 3

-g wstawia do pliku wynikowego (binarnego) standardowe informacje wyszukiwania błdów (tzw. informacje dla debuggera bdzie o nim mowa w jednym z kolejnych wicze) -ggdb -ansi podobnie jak g, ale informacji tych jest znacznie wicej ciekawy przełcznik o walorach dydaktycznych. cisła kontrola zgodnoci ze standardem ANSI C. Poniej wykonano pewien cig czynnoci demonstrujcych działanie tych przełczników. Aby zmusi kompilator go wygenerowania ostrzeenia zmieniono druga lini w przykładowym programie na: void main(void) Kompilator bdzie wówczas ostrzegał nas o niepoprawnej definicji funkcji main. Definicja mówi, e funkcja nie zwraca adnej wartoci (słowo kluczowe void), cho w rzeczywistoci funkcja zwraca warto typu całkowitego. Zwykle powinnimy dy do tego, aby eliminowa przyczyny pojawiania si ostrzee kompilatora. W bardzo prostych programach moe nie jest to a tak istotne, jednak w złoonych projektach ostrzeenia kompilatora mog by zwiastunem trudnych do zdiagnozowania błdów w działaniu programów. Zwrómy równie uwag na zmian wielkoci pliku wynikowego po uyciu opcji g oraz ggdb. Na pocztku mamy tylko plik ródłowy. -rw-r--r-- 1 root root 82 Sep 21 21:53 hello.c Kompilujemy plik ródłowy. Powstaje plik wynikowy a.out. Jest to plik wykonywalny (atrybut x). $ gcc hello.c -rwxr-xr-x 1 root root 4819 Sep 22 00:12 a.out -rw-r--r-- 1 root root 82 Sep 21 21:53 hello.c Wykonujemy program. Uwaga na kropk. $./a.out Hello, world! Kompilujemy plik ródłowy. Powstaje plik wynikowy hello. $ gcc hello.c -o hello -rwxr-xr-x 1 root root 4819 Sep 22 00:13 a.out -rwxr-xr-x 1 root root 4819 Sep 22 00:13 hello -rw-r--r-- 1 root root 82 Sep 21 21:53 hello.c Kompilujemy plik ródłowy. Dodajemy informacje dla debuggera. Rozmiar pliku wynikowego powiksza si. $ gcc hello.c -o hello -g -rwxr-xr-x 1 root root 4819 Sep 22 00:13 a.out -rwxr-xr-x 1 root root 14063 Sep 22 00:14 hello opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 4

-rw-r--r-- 1 root root 82 Sep 21 21:53 hello.c $ gcc hello.c -o hello -ggdb -rwxr-xr-x 1 root root 4819 Sep 22 00:13 a.out -rwxr-xr-x 1 root root 11351 Sep 22 00:14 hello -rw-r--r-- 1 root root 82 Sep 21 21:53 hello.c Plik ródłowy został zmieniony. W drugiej linii jest: void main(void). Kompilator generuje ostrzeenie (ang. warning). $ gcc hello.c -o hello hello.c: In function `main': hello.c:5: warning: `return' with a value, in function returning void hello.c:3: warning: return type of `main' is not `int' Za pomoc przełcznika w ignorujemy wszystkie ew. ostrzeenia kompilatora. Nie jest to jednak dobra praktyka! Ostrzeenia kompilatora mog by preludium do powanych kłopotów! $ gcc hello.c -o hello -w -rwxr-xr-x 1 root root 4803 Sep 22 00:26 hello -rw-r--r-- 1 root root 83 Sep 22 00:25 hello.c Program uruchomił si, mimo ostrzee kompilatora. W ogólnoci tak by nie musi. Program moe nie działa lub działa z trudnymi do zdiagnozowania błdami. $./hello Hello, world! $ 5!.)$67 Tylko bardzo proste programy składaj si wyłcznie z jednego pliku ródłowego. Zwykle tych plików jest wiele, gdy dzielenie kodów ródłowych na wiele plików jest po prostu wygodne i zwiksza efektywno programowania. Proces kompilacji programów za pomoc kompilatora gcc składa si z czterech etapów: przetwarzania wstpnego, kompilacji, asemblacji oraz łczenia. Nie wnikajc w tej chwili w szczegóły powiedzmy tylko tyle, e efektem porednim pomidzy plikiem ródłowym a plikiem wynikowym jest tzw. kod obiektowy (plik poredni). Gdy plików ródłowych jest kilka, kilka jest te plików obiektowych. Za pomoc programu scalajcego (ang. linker) naley połczy je w jeden plik wykonywalny. Obrazuje to poniszy rysunek: plik1.c Kompilator gcc plik1.o Linker plik2.c plik3.c Kompilator gcc Kompilator gcc plik2.o plik3.o Program wykonywalny opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 5

Kady z plików ródłowych mona oczywicie kompilowa oddzielnie, ale chcc otrzyma jeden wynikowy plik wykonywalny naley skompilowa je w taki sposób, aby automatycznie nastpiło utworzenie plików obiektowych oraz (tu jednego) pliku wynikowego. Wykonanie powyszego zadania z uyciem kompilatora gcc jest bardzo proste. Naley po prostu w wierszu polece gcc poda nazw wszystkich plików ródłowych, które maj by skompilowane. Reszta zostanie wykonana automatycznie. Poniej zamieszczono przykład programu z 3 plikami ródłowymi oraz sposób ich kompilacji. Prosimy o bardzo wnikliwe zapoznanie si z plikami ródłowymi oraz z przykładowym zapisem sesji przy terminalu. // calc.c #include <stdio.h> #include <stdlib.h> // Funkcje nazywam div2, bo istnieje juz w bibliotece standardowe // funkcja o nazwie div extern double add (double, double); extern double sub (double, double); extern double mul (double, double); extern double div2(double, double); // extern gdy definicje funkcji znajduj si w innym pliku int main(void) double a, b; char str[80]; printf("\n\nprosty kalkulator: \n"); printf("==================\n\n"); printf ("Podaj pierwsza liczbe (a): "); gets(str); a = atof(str); printf ("Podaj druga liczbe (b): "); gets(str); b = atof(str); printf("\n"); printf("liczba a: %8.2f\nLiczba b: %8.2f\n\n", a, b); printf("a + b: %8.2f\n", add(a, b)); printf("a - b: %8.2f\n", sub(a, b)); printf("a * b: %8.2f\n", mul(a, b)); printf("a / b: %8.2f\n", div2(a, b)); printf("\n *** Koniec ***\n\n"); return 0; // addsub.c double add (double a, double b) return a + b; double sub (double a, double b) return a - b; opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 6

// muldiv.c double mul (double a, double b) return a * b; double div2 (double a, double b) return a / b; Na pocztku mamy tylko 3 pliki ródłowe. -rw-r--r-- 1 root root 130 Sep 21 23:57 addsub.c -rw-r--r-- 1 root root 761 Sep 22 00:35 calc.c -rw-r--r-- 1 root root 130 Sep 21 23:57 muldiv.c Kompilujemy pliki. Kompilator gcc wie co z nimi zrobi. Automatycznie stworzy pliki obiektowe oraz połczy je w jeden wynikowy plik wykonywalny. Ostrzeenia o uywaniu funkcji gets wynikaj z podatnoci tej funkcji na ataki hacker-ów (przepełnienie bufora). $ gcc calc.c addsub.c muldiv.c -o calc /tmp/ccnhljiv.o: In function `main': /tmp/ccnhljiv.o(.text+0x3e): the `gets' function is dangerous and should not be used. W wyniku kompilacji powstaje plik wykonywalny. -rw-r--r-- 1 root root 130 Sep 21 23:57 addsub.c -rwxr-xr-x 1 root root 6049 Sep 22 00:39 calc -rw-r--r-- 1 root root 761 Sep 22 00:35 calc.c -rw-r--r-- 1 root root 130 Sep 21 23:57 muldiv.c Tym razem kompilujemy pliki ródłowe tylko do postaci obiektowej. Na dysku powstaj pliki z rozszerzeniem.o $ gcc -c calc.c addsub.c muldiv.c -rw-r--r-- 1 root root 130 Sep 21 23:57 addsub.c -rw-r--r-- 1 root root 793 Sep 22 00:39 addsub.o -rwxr-xr-x 1 root root 6049 Sep 22 00:39 calc -rw-r--r-- 1 root root 761 Sep 22 00:35 calc.c -rw-r--r-- 1 root root 1904 Sep 22 00:39 calc.o -rw-r--r-- 1 root root 130 Sep 21 23:57 muldiv.c -rw-r--r-- 1 root root 794 Sep 22 00:39 muldiv.o Utworzone pliki obiektowe łczymy w jeden wynikowy plik wykonywalny. Pliki calc oraz calc2 maj identyczne rozmiary i de facto identyczn struktur. $ gcc calc.o addsub.o muldiv.o -o calc2 calc.o: In function `main': calc.o(.text+0x3e): the `gets' function is dangerous and should not be used. -rw-r--r-- 1 root root 130 Sep 21 23:57 addsub.c -rw-r--r-- 1 root root 793 Sep 22 00:39 addsub.o opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 7

-rwxr-xr-x 1 root root 6049 Sep 22 00:39 calc -rw-r--r-- 1 root root 761 Sep 22 00:35 calc.c -rw-r--r-- 1 root root 1904 Sep 22 00:39 calc.o -rwxr-xr-x 1 root root 6049 Sep 22 00:40 calc2 -rw-r--r-- 1 root root 130 Sep 21 23:57 muldiv.c -rw-r--r-- 1 root root 794 Sep 22 00:39 muldiv.o Oczywicie gdy zmodyfikujemy tylko jeden plik, to nie ma potrzeby kompilowania wszystkich plików ródłowych. Przeanalizuj takie podejcie: $ gcc -c calc.c $ gcc calc.o addsub.o muldiv.o -o calc2 Załómy, e w katalogu biecym znajduj si pliki ródłowe, a w podkatalogu moje-pliki-n nasze własne pliki nagłówkowe. Niech pocztek pliku calc.c wyglda tak: // calc.c #include <stdio.h> #include <stdlib.h> #include "moj.h" // tak zwykło si pisa dla plików niestandardowych... Przykładowa zawarto pliku moj.h: // moj.h #define AUTOR Artur_Gramacki Aby teraz poprawnie skompilowa program, naley uy przełcznika -I $ gcc -c Imoje-pliki-n calc.c Uycie przełcznika pedantic bardzo rygorystycznie sprawdza poprawno kodu. W tym przypadku pokazuje, e w pliku moj.k zapomnielimy nacisn Enter na kocu wiersza $ gcc -c Imoje-pliki-n pedantic calc.c In file included from calc.c:5: moje-pliki-n/moj.h:1: warning: file does not end in newline Uruchamiamy nasz program. $./calc Prosty kalkulator: ================== Podaj pierwsza liczbe (a): 10 Podaj druga liczbe (b): 20 Liczba a: 10.00 Liczba b: 20.00 a + b: 30.00 a - b: -10.00 a * b: 200.00 a / b: 0.50 *** Koniec *** I to by było na tyle! opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 8