Programmeerimiskeel C/Stiil
Sisukord |
[redigeeri] C struktuur ja stiil
See osa tutvustab põhitõdesid effektiivse koodistruktuuri kirjutamisel Programmeerimisekeeles C. Kirja on pandu põhitõed liigendamisest, kommentaaridest, ja teistest elementidest, mis muudavad C koodi paremini loetavaks. Selle lugemiseks pole vajalik omada eelteadmisi Programmeerimisekeelest C.
Uustulnukad võivad kirjutada oma koodi oma suva järgi, sest lõppudelõpuks on kompillaatori asi koodi tõlkida - see on vale. Hästi disainitud koodi on kogenud programeeriatel kergem lugeda ja redigeerida. Kui luuakse tarkvara, siis tihti mitte ainult effektiivset, vaid esmalt dünaamilist(muudatusi on kerge implementeerida) ja arusaadavat.
[redigeeri] Sissejuhatus
Järgnevad kaks koodiblokki on pärast preprotsessori läbikäimist võrdväärsed: Mõlemad sisaldavad täpselt sama koodi, ning pärast kompilleerimist, saab neist täpselt sama programm. Siisiki ühel puhul on eiratud pea kõiki C struktuuri ja stiili reegleid.
Tegemist on võrdlemisi lühikese programmiga, kuid ta annab ülevaate milline vahe võiks olla oma suva järgi küljendatud koodil, ning antud reeglite põhjal kirjutatud koodi, kui seda loeb elukutseline programmeerija
Reegleid eirates:
#include <stdlib.h> #include <time.h> int juhuslikArv(void){return rand()%80 + 1;} int main(void){int i, j;int massiiv[N];srand(time(0));for(i=0;i<20;i++){massiiv[i]=0;}for(i=0;i<20;i++){massiiv[i]= juhuslikArv();j=i;while(j--){if(massiiv[i]==massiiv[j]){i--;}}}printf("Keno loto numbrid on %d",massiiv[0]); for(i=1;i<20;i++){printf(",%d",massiiv[i]);}printf("\n");getchar();getchar();return 0;}
Reegleid jälrgides
/* Nimi: Harjutus ülessanne 5 Autor: Margus Martsepp Kuupäev: 23.05.07 02:20 Tööpõhimõte: Koostatud programm, mis pakub välja numbrid osalemaks Keno Lotos. Numbrid on vahemikus vahemikus 1-80, ning ei kordu. Väljastatakse 20 numbrit. */ //teegid #include <stdlib.h> #include <time.h> //defineeringud #define XXX printf("\n");getchar();getchar();return 0 #define MAXgenS 80 //tagatatavate numbrite ülempiirang #define N 20 //tagastatavate numbrite arv //prototüüp int juhuslikArv(void); //prefunktsioon int main(void){ int i,j; int massiiv[N]; srand(time(0)) ; for(i=0;i<N;i++){//massiivi initsialiseerimine massiiv[i]=0; } for(i=0;i<N;i++){//massiivi väärtustamine massiiv[i]=juhuslikArv(); j=i; while(j--){//kordus, mis tagab, et arvud ei korduks if(massiiv[i]==massiiv[j]){i--;} } } printf("Keno loto numbrid on %d",massiiv[0]); for(i=1;i<N;i++){ printf(",%d",massiiv[i]); } XXX;//MS windowsi IDE keskonnas kompilleerides, et programm ei sulguks liiga varakult } //teised funktsioonid int juhuslikArv(void){ // funktsioon tagastab suvalise täisarvu vahemikus 1-MAXgenS return rand()%MAXgenS + 1; }
Teises koodiplokis on kasutatud:
- liigendamist ja rea vahesid, mis märgatavalt koodi loetavust; ilma igasuguse koodi effektiivsuse erinevuseta.
- kommentaare, mis annavad mõista mida on teha üritatud / tehtud.
- prototüübe, mis aitavad mõista nii arvutil kui ka inimesel, mis funktsioone ja selle parameetreid on kasutatud ülessande lahendamiseks (ülikiire moodus ülevaate saamiseks).
- Konstandid võimaldavad muuta koodi parameetreid kiiresti ja mugavalt. Üle pingutades võivad nad hoopis muuta koodi lugemise keeruliseks.
Lisaks:
- Ka muutujate nimetused mängivad suurt rolli koodist arusaamisel, kuigi ta otseselt reegel ei ole, tuleks nimetada muutujad arusaadavalt.
- Osad koodiredaktorid juba vaikeväärtustena võimaldavad koodikirjutamist/redigerimist lihtsustada (NT: koodivõtmesõnade värvimine, struktuuride/funktsioonide pakkumine, liigendamine "{" ja "}" märkide põhjal, koodilühendid, veapakkujad jne.)
Järgnevalt seletataksegi need täpsemalt lahti. Tuleks tähele panna, et siin kasutatud kood on vaid küljendamise eesmärgil, ning selle sisust ei pea veel aru saama.
[redigeeri] Liigendamine
Reeglid:
- iga funktsiooni tüüp algab rea vasakust servast
- "{" on viimane märk reas
- järgmine rida algab ühe "tabulatsiooni" või 4 tühiku vahega võrreldes eelmisest reast eespool
- "}" on esimene märk reas
- kui talle ei järgne "else", siis järgnev koodisegment algab uuelt realt
- ta algab ühe "tabulatsiooni" või 4 tühiku vahega võrreldes eelmisest reast tagapool
- ";" lõpetab rea
- Erandiks on tingimused nt: for korduses
Seega:
#include <stdio.h> int main(){int i=0;printf("Tere Maailm!");for(i=0;i<1;i++){printf("\n");break;}return(0);}
- saab:
#include <stdio.h> int main(){ int i=0; printf("Tere Maailm!"); for(i=0;i<1;i++){ printf("\n"); break; } return(0); }
Lisaks
- Paljud koodiredaktorid liigendavad ainult "enteri" vajutuse peale juba, kuigi tihti pole protses täisautomaatne, aitab see märgatavalt kaasa.
[redigeeri] Reavahed
Kood jaotub osadeks ja nende osade vahele on sobilik panna ka tühikud. Korrektne oleks ka kommenteerida iga osa (nt: mis tehakse, mida deklareeritakse, mis kogumikuga on tegemist jne.).
Koodist:
#include <stdio.h> int main(){ int i=0; printf("Tere Maailm!"); for(i=0;i<1;i++){ printf("\n"); break; } return(0); }
- saab:
#include <stdio.h> int main(){ int i=0; printf("Tere Maailm!"); for(i=0;i<1;i++){ printf("\n"); break; } return(0); }
[redigeeri] Kommentaarid
Kommentaarid, jagunevad oma ülessannetelt mitmeks. Koodi tuleks võtta kui tehnilist ettekannet, kus kommentaarid on seletav tekst.
[redigeeri] Üherealised
Üherealised kommentaarid märgivad koodibloki algust, ning peamiselt kirjeldavad muutujate ja kordajate kasutusviise.
Märgistus:
- // - tähistab üherealise kommentaari algust reas
- Kuni koodirea lõpuni on tegemist kommentaariga
Koodist:
#include <stdio.h> int main(){ int i=0; printf("Tere Maailm!"); for(i=0;i<1;i++){ printf("\n"); break; } return(0); }
- saab:
//vajalikud teegid #include <stdio.h> //peafunktsioon int main(){ //deklareerin muutujad int i=0; //universaalne tsükli kordaja printf("Tere Maailm!"); //tsüklel, mis väljastab reavahetusi ekraanile for(i=0;i<1;i++){ printf("\n"); break; //pärast esimest reavahetuse väljutakse } //väljun programmist return(0); }
[redigeeri] Mitmerealised
Võimalus pikemalt kirjeldada, mida programm/funktsioon teeb. Pole harv juhus, kui korraliku kommentaari kirjutamisele kulub rohkem aega, kui pärst seda kulub programmi/funktsiooni koostamisele. Mis veelkord näitab, kui vajalik on neid kirjutada. Koodi tähtsamad kommentaarid ümbriteksetakse tärni(*) kastiga, mille parem pool on avatud.
Märgistus:
- /* - tähistab mitmerealise kommentaari algust
- */ - tähistab mitmerealise kommentaari lõppu
- kõik koodisegmendid ja tekst, mis vahele jääb on kommentaar
Kood:
//vajalikud teegid #include <stdio.h> //peafunktsioon int main(){ //deklareerin muutujad int i=0; //universaalne tsükli kordaja printf("Tere Maailm!"); //tsükel, mis väljastab reavahetusi ekraanile for(i=0;i<1;i++){ printf("\n"); break; //pärast esimest reavahetuse väljutakse } //väljun programmist return(0); }
- pärast:
/******************************************************************************* * * Nimi: Näiteülessane 1 (n2ide_1.c) * Autor: Margus Martsepp * Kuupäev: 10.06.07 19:37 * Tööpõhimõte: * Tuua näide ühest lihtsast funktsioonist, mis lõpuks saab korralikult * küljendatud. * Funktsioon kuvab ekraanile stringi "Tere Maailm", läbib korduse, millest * kuvatakse ekraanile reavahetus. Pärast seda lõpetab programm oma töö. * *******************************************************************************/ //vajalikud teegid #include <stdio.h> //peafunktsioon int main(){ //deklareerin muutujad int i=0; //universaalne tsükli kordaja printf("Tere Maailm!"); //tsükel, mis väljastab reavahetusi ekraanile for(i=0;i<1;i++){ printf("\n"); break; //pärast esimest reavahetuse väljutakse } //väljun programmist return(0); }
[redigeeri] Prototüübid
[redigeeri] Konstandid
[redigeeri] Muutuja nimetused
Kuigi nüüd omavad muutujad kommentaare oma kasutusviisidest, siis siiski oleks soovitatav nimetada muutujad ja massiivid võimalikult nende kasutusala järgi.
Näiteks:
int g; //Eksami hinne 1-10 palli skaalal int z; //Eksami katse, arv mis sümboliseerib, mitu korda on seda eksamit tehtud
- võiks soovitatavalt olla:
int eksam_hinne; //Eksami hinne 1-10 palli skaalal int eksam_katse; //Eksami katse, arv mis sümboliseerib, mitu korda on seda eksamit tehtud
[redigeeri] Ülessanded
[redigeeri] Viited
- Aladdin's C coding guidelines - (en:) Juhend
- C/C++ Programming Styles (en:) GNU ja Linux'i Koodikirjutamise stiil