Przykład podziału programu na pliki nagłówkowe i źródłowe:
silnia.c
#include <stdio.h> #include "fmat.h" int main() { int liczba,s; printf("Podaj liczbe: "); scanf("%d",&liczba); s = silnia(liczba); printf("Silnia z %d wynosi %d\n",liczba,s); return 0; }
fmat.h
#ifndef FMAT_H #define FMAT_H int silnia(int n); float potega(float podstawa,int wykladnik); #endif
fmat.c
#include "fmat.h" int silnia(int n) { int i=2, s=1; while( i < n+1 ) { s = s * i; i = i + 1; } return s; }
Uwaga: kompilacja przeprowadzana jest tylko na plikach źródłowych (*.c), więc kompilacja powyższego programu w Linuksie wygląda tak:
cc fmat.c silnia.c -o silnia
Ćwiczenia
tab.c (tu umieść definicje funkcji), prog.c (tu umieść funkcję main()) i tab.h (plik nagłówkowy z deklaracjami funkcji zdefiniowanych w pliku tab.c)define zdefiniuj stałą określającą wielkość tablicyodwroc, która odwróci kolejność elementów w tablicy liczb rzeczywistych, umieść deklarację funkcji w odpowiednim pliku nagłówkowym a definicję w pliku źródłowymmaxind, która dla danej tablicy liczb rzeczywistych zwraca indeks (pozycję w tablicy) elementu o największej wartościmaxind)
Kompilator cc (gcc)
cc [-Ikatalog] [-Lkatalog] [-o nazwa] źródło.c ... [-lbiblioteka ...]
-I katalog z plikami nagłówkowymi
-L katalog z bibliotekami
-l nazwa biblioteki, np -lm to biblioteka matematyczna
W Linuksie pliki nagłówkowe znajdują sie w katalogu /usr/include/, biblioteki w katalogach /lib/, /usr/lib.
Preprocesor
cc -E prog.c | less
Kompilacja (powstają pliki obiektowe *.o, kompilator Borland *.obj)
cc -c prog.c tab.c
Linkowanie
ld -lc tab.o prog.o -o prog // nie działa, dlaczego? cc tab.o prog.o -o prog
Uruchomienie
./prog
Dodatkowe narzędzia:
ldd prog
nm tab.o
dekompilacja programu
objdump -D tab.o
lista symboli z pliku obiektowego (podobnie do nm)
objdump -t tab.o
elfreadelf -a tab.o
PATH)
Składnia podobna do gcc jednak istotna jest kolejność opcji
bcc32 [-Ikatalog] [-Lkatalog] [-enazwa.exe] źródło.c ... [biblioteka.lib ...]
Przykład
bcc32 -eprogram.exe tab.c prog.c
lc (np.: „C:\Program Files\Microsoft Visual Studio 8\VC\bin\lc.exe” )Składnia
cl [/Fe"nazwa_pliku.exe"] źródło.c ... [/link biblioteki]
Borland C++ Builder: File→New→Other→Console Wizard Visual Studio C++: File→New→Project→Win32→Win32 Console ApplicationBorland C++ Builder: Project→Add To Project Visual Studio C++: Project→Add Existing Item Borland C++ Builder: Project→Make Project (Ctrl+F9) Visual Studio C++: Build→Build Solution (F6)Borland C++ Builder: Run→Run (F9) Visual Studio C++: Debug→Start Debugging (F5)Uwaga: konsola w której wyświetlane są wyniki działania programu zamknie się automatycznie po wykonaniu programu
Ćwiczenia
maxind (z ćwiczeń powyżej) posortuje tablicę liczb rzeczywistych