Programmeerimiskeel C/Keelereeglid

Keelereeglid muuda

Kiirülevaade peamistest reeglitest:

  1. C programm kirjutatakse väiketähtedes
    • erandiks on konstantid
    • erandiks on defineeritud makrode nimed
  2. C ei nõua koodi treppimist, vaid on vaba kujundusega
    • Koodi küljendamata jättes on teda raske lugeda
    • Oskust koodi küljendada peab valdama iga elukutseline programmeerija
  3. Lausendi/koodisegmendi lõppu kirjeldab semikoolon (;)
  4. Suur- ja väiketähti eristatakse!

Lisaks:

C programmis on vajalik, et struktuur või kasutatav funktsioon, selle prototüüp oleksid kompilleerija poolt enne sisse loetud, kui seda on vaja kasutada. Siin on vaid erandiks rekrusiivsed funktsioonid ja struktuurid mis viitavad iseendale.

Näide enesele viitavast struktuurist:

Omadeklareeritud struktuur omab viita sturktuurile, mida pole veel deklareeritud. Kompilleerija on võimeline seda kompilleerima, kuna viida puhul ei deklareerita otsest väärtust mälus.
struct P2is{
   struct Sisu *pSisu;
   struct P2is *pViitJ2rgmisele;
};

C kood omab järgnevat ülessehitust: muuda

Kommentaar muuda

Kommentaarid on sisukirjeldused, tarkvarale mida püüti realiseerida, kui ka ääremärkused ja seletused. Kommentaarid jagunevad kaheks:

  • ühe realine
    • Kommentaari tähis on //
  • mitme realine
    • Kommentaari algus tähis on /*
    • Kommentaari lõpu tähis on */

- nt: Osa või täis nimetus, kes kirjutas, millal kirjutati ja mida kirjutas; nt:

/*******************************************************************************
*  Nimi: Harjutus ülessanne 1 
*  Autor: Margus Martsepp
*  Kuupäev: 22.05.07 22:34
*  Tööpõhimõte: 
*      Koosta algoritm ja kirjuta programm, mis teostab konverteerimise Eesti 
*      kroonidest eurodeks ning vastupidi täpsusega kaks kohta peale koma 
*      (näiteks Y EUR = xxx.xx EEK, yy EEK= xx.xx EUR).
*******************************************************************************/

Teegid muuda

- päisesse lisatakse funktsioonide prototüübid; nt:

/* preprotsessori korraldus, mis lisab koodi päisesse teegis sisalduvad funktsiooni kirjeldavad protatüüpid*/
#include <stdlib.h> //standard funktsioonid
#include <string.h> //sisaldab sõne/stringi manipuleerimiseks funktsioone
#include <stdio.h> //sisaldab sisend&väljund funktsioone
#include <math.h> //sisaldab matemaatika funktsioone
#include <conio.h> //sisaldab tüübikinnitus funktsioone

Defieeringud muuda

Defineeringud võimaldavad kasutada preprotsessorit loomaks tuntud tüübile alias. Ennem kompilleerimist asendatakse defineeringud konstantidega, mida nad defineerisid.

  • võimaldavad koodikokkuhoidu
  • võimaldavad kiiresti muuta teatud tüüpi väärtuseid
    • massiivi ulatus
    • kindlad väärtused nt: hinnad
// preprotsessori korraldus, mis asendab enne koodi kompilleerimist kõik pii'd  3.14...'ga
#define pii 3,1415926535897932384626433832795
#define JA &&
#define V6I ||   
#define ON ==
//järgmistel ridadel on kirjeldatud funktsioonid, kasutades if-funktsiooni lühikest varianti 
#define MIN(a,b) ((a)>(b)?(b):(a))
#define MAX(a,b) ((a)<(b)?(b):(a))

Lisaks:

  • defineerida võib makrosid, mis kompilleeritakse vaid teatud tingimustel nt: kui tegemist on Win_32 keskonnaga

Struktuurid muuda

- omadeklareeritud struktuurid ja tüübid

 
typedef String *char;
struct V2rvid { 
   int Punane;
   int Roheline;
   int Sinine;
};
typedef RGB V2rvid;

Globaalsed muutujad muuda

Vaid deklareerimise asukoht, teeb neist globaalsed muutujad. Väärtused on ligipääsetavad kõigis funktsioonides.

 
RGB v2rv1;

Prototüübid muuda

Prototüüp on funktsioonide parameetrite tüüpide kirjeldus.

Näide mõnes prototüübist:

int taida_massiiv(KAUP *, int *);
int kuva(KAUP *, int);
int sordi(KAUP *, int);
int kuva2(KAUP *, int);
int kuvax(KAUP *, int);
void vaheta(KAUP *, KAUP *);

Peafunktsioon muuda

- kordineerib funktsioonide tööd, tema sees deklareeritakse lokaalsed muutujad, mida läbi parameetrite antuna saab jagada teiste funktsioonidega. Andmeid võib funktsioonidaga jagada väärtusparameetrite (ByVal[ue]) või viidaparameetrite (ByRef[erence])kaudu.

  1. ByRef puhul antakse viit mälu kohale kus asub muutuja väärtus, ning pärast väärtuse muutmist funktsioonis on tema väärtus muudetud jäädavalt
  2. ByVal puhul antakse üle koopia mälus olnud väärtusest, ning fuktsiooni kestel väärtust muutes ei muudeta algset väärtust

Funktsioonid muuda

Funktsioonid - algandmete põhjal tagastatakse väärtus või teostatakse tegevus. Andmete analüüsimiseks võivad funktsioonid deklareerida lokaalsed muutujad (mille väärtust hoitakse mälus kuni funktsiooni lõpuni) või dünaamilised muutujad, mis jääksid mittekoristamisel mällu ka pärast peaprogrammi lõppu.

Funktsiooni ülesehitus muuda

Programeerimiskeel C on funktsioonipõhine. Igale korduvale ülessandele on võimalik algandmete(parameetrite) põhjal leida lahend. Kõik funktsioonid omavad järgnevat ülesehitust:

  
funktsiooni_poolt_tagastatava_vastuse_andmetüüp funktsiooni_nimi(parameetri_tüüp parameeter){
    funktsiooni_sisu;
    return tagastatav_funktsiooni_väärtus;
}

Alati käivitatakse esimesena pea funktsioon "main". Peafunktsiooni poolt tagastatakse kombe kohaselt veakood, mis on täisarvu tüüpi (tüübitunusega - int), ning mis on 0 kui programmis ei esinenud vigasid. Kui funktsioonil puuduvad parameetrid, täidetakse parameetrite sulgud võtmesõnaga "void" või jäetakse sulud tühjaks. Seega võiks peafunktsioon välja näha:

   
int main(void){
    funktsiooni_sisu;
    return 0;
}

Funktsioonide vaheline andmevahetus muuda

Funktsioonide vahel toimub andmevahetus läbi:

  • parameetrite(andmed muutujates)
  • funktsiooni nime(tagastatakse käsuga "return funktsiooni_tüübile_vastav_muutuja_väärtus")
  • alternatiivse mälu(nt: andmed failis mis asub kõvakettal)
  • globaalsete muutujate