1. praktikum - Tutvumine keskkonnaga (itv0020)

Allikas: Lambda
Süsteemprogrammeerimine keeles C

Praktikumid

Laborid

Kodutööd peavad töötama dijkstra masinas, seega tuleks sinna korra vähemasti sisse saada.

Muidu võib laboris rahulikult kasutada ka olemasolevaid masinaid.


Dijkstra

TTÜ sisevõrgust ja väljastpoolt: dijkstra.cs.ttu.ee 

(Windowsi all ja kodus võite näiteks Putty või SSH Secure Shell nimelist programmi kasutada)

Ligipääs TTÜ parooli ja kasutajanimega üle ssh

ssh kasutajanimi@dijkstra.cs.ttu.ee


NB! Dijkstrasse sisselogimiseks on tarvis oma kasutajanimi õppejõule edasi öelda: niisama tudengeid enam sisse ei lasta.

Info

Tekstiredaktoriks vim: kes ei oska võtke joe või pico. (pico-ga on osadel praegu miskipärast probleemid) Vimi tutvustus

Tutvuge praktikumiülesannetega.

1. Hello, World

Kirjutage programm "Hello, World", salvestage nimega hello.c . Kompileerige see käsuga gcc hello.c -o hello


-o argument ütleb gcc-le, mis nimega soovid väljundit (vaikimisi pakutakse sulle faili a.out).

  • Vihje: programmiteksti leiate loenguslaididelt
  • Vihje2: programmi käivitamiseks kataloogist, kus te viibite kirjutage ./hello .

2. Kompileerimise etapid

Kompileerimine koosneb etappidest: preprocessing, compilation proper, assembly, linking. Leidke viis kompileerimise peatamiseks nii, et tulemuseks oleks:

  1. preprotsessori poolt eeltöödeldud C kood
  2. assemblerisse söödetav kood

Tutvuge nende failidega. Esimeses failis on teie tekstile lisatud stdio.h fail, teises näete assemblerkeele käske juba konkreetselt oma arvutisüsteemi jaoks. C loodi selleks, et programmeerija ei peaks assemblerkeeles kirjutama.

  • Vihje: man gcc (täpsemalt siis Controlling output all (gcc manuaali leiab praegu sun-i arvutist)
  • Vihje2: otsing on nupuga /, väljumine nupuga q, HTML versioon käsust


3. Hoiatused

Minimaalne "Hello, World" kood ei ole täiesti korrektne. Leidke viis panna gcc hoiatama võimalike vigade eest programmikoodis.

Vihje: vt vihje eelmises punktis (all optional warnings)

4. Mitme faili kompileerimine

Suuremate programmide paremaks haldamiseks jagatakse programm mitmeks osaks. Tehke programm nimega Hello2, mille kood jaguneb kolmeks: esimeses failis (hello.c) on funktsioon main(), teises failis (sayHello.c) funktsioon sayHello() kolmandas failis (sayHello.h) sayHello() deklaratsioon.

Leidke viis säärase programmi kompileerimiseks.

  • Vihje: #include reas kasutage jutumärke, sest kantsulud on süsteemilibrade lisamiseks
  • Vihje2: gcc-le saab ette anda mitu lähtefaili (ilma mingite lisaargumentideta)

5. Makefile

Suuremate projektide puhul kasutatakse kompileerimiseks programmi "make". Make näeb programmi kui omavahel sõltuvaid faile. Make reeglid kirjutatakse faili, mille levinud nimi on kas makefile või Makefile, selles failis on reeglid järgmiselt:

tulemusenimi: eeldused (eralda tühikuga)
tab käsud

see tab on vaja nupuga vajutada, mitte kirjutada nii nagu ma siia kirjutasin

Nt "Hello, World" kompileerimiseks on makefile

hello: hello.c
tab gcc hello.c -o hello


Kompileerimine käivitub kui kasutada käsku:

make hello


Eeldus võib olla nii failinimi kui reegel millegi muu tegemiseks.

Ülesanne: Kohandada eelmises punktis tehtud kahe programmikoodifaili tekste nii, et neid kompileeritaks make'i abil. Sealjuures nii, et esimeses järgus luuakse 2 .o laiendiga objektfaili ja teises järgus toimub objektfailide linkimine. Teha seda nii, et objektfaile kompileeritakse ainult juhul kui vastava objektfaili lähtekood muutub.

  • Vihje: vt eelnev tekst, Google, nuruge õppejõult infot (võib ka varasemate punktide puhul)