{"id":4,"date":"2014-08-18T11:56:48","date_gmt":"2014-08-18T09:56:48","guid":{"rendered":"http:\/\/www.blue.pri.ee\/ttu\/?page_id=4"},"modified":"2026-05-29T16:14:21","modified_gmt":"2026-05-29T14:14:21","slug":"koodimisstiil","status":"publish","type":"page","link":"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/","title":{"rendered":"Koodimisstiil"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Sissejuhatus\" >Sissejuhatus<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Koodirea_pikkus\" >Koodirea pikkus<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Koodirea_poolitamine\" >Koodirea poolitamine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Sonede_poolitamine\" >S\u00f5nede poolitamine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Koodi_kommenteerimine\" >Koodi kommenteerimine<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Milline_on_hea_ja_milline_halb_kommentaar\" >Milline on hea ja milline halb kommentaar<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Faili_pais\" >Faili p\u00e4is<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Muutujate_deklareerimine_ja_initsialiseerimine\" >Muutujate deklareerimine ja initsialiseerimine<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Viitmuutujate_deklareerimine_pointer\" >Viitmuutujate deklareerimine (pointer)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Arvutused_ja_loogikaavaldised\" >Arvutused ja loogikaavaldised<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#define_makrod\" >#define makrod<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Tingimuslaused\" >Tingimuslaused<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Switch_lause\" >Switch lause<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Treppimine\" >Treppimine<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Treppimise_sugavus\" >Treppimise s\u00fcgavus<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Tsuklid\" >Ts\u00fcklid<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Pesastatud_for_tsuklid\" >Pesastatud for ts\u00fcklid<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#_Funktsioonid\" >\u00a0Funktsioonid<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#_main_funktisoon\" >\u00a0main() funktisoon<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#_Enda_loodud_funktsioonid\" >\u00a0Enda loodud funktsioonid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Funktsiooni_nimetamise_pohimotted\" >Funktsiooni nimetamise p\u00f5him\u00f5tted<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Funktsiooni_kommentaarid\" >Funktsiooni kommentaarid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Funktsiooni_prototuup\" >Funktsiooni protot\u00fc\u00fcp<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Loendid_ehk_enumeration\" >Loendid ehk enumeration<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/#Kirjed_ehk_struktuurid_struct\" >Kirjed ehk struktuurid (struct)<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Sissejuhatus\"><\/span>Sissejuhatus<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Koodimisstiil on dokument, mille eesm\u00e4rk on kirjeldada missugune peaks kirjutatud programmikood v\u00e4lja n\u00e4gema. Stiili j\u00e4lgimise peamine eesm\u00e4rk on parandada koodi loetavust ja tagada \u00fchtlane stiilikasutus \u00fcle kogu programmi. Parem loetavus t\u00e4idab ka mitmeid varjatud eesm\u00e4rke &#8211; n\u00e4iteks on koodist vigu oluliselt lihtsam leida, seda nii sul endal kui ka sind abistavatel v\u00f5i sinuga koos t\u00f6\u00f6tavatel inimestel.<\/p>\n<p>Koodimisstiilid erinevad ja seda mitmeti. \u00dches programmeerimiskeeles v\u00f5ib sageli esineda mitu konkureerivat koodimisstiili. Samuti erinevad koodimisstiili juhised \u00fchest programmeerimiskeelest teise. Lisaks erinevad ka koodimisstiili n\u00f5uded ettev\u00f5ttest ettev\u00f5ttesse. Eriti oluline on viimane &#8211; kui sinu t\u00f6\u00f6andjal on kindel koodimisstiili n\u00f5ue, mida k\u00f5ik t\u00f6\u00f6tajad aktsepteerivad ja kasutavad, siis tuleb sellest ka kinni pidada, hoolimata personaalsest eelistusest (v\u00f5i l\u00e4heneda argumenteeritult miks seda tuleks muuta).<\/p>\n<p>Selles \u00f5ppeaines on samuti m\u00e4\u00e4ratletud koodimisstiil, mida tuleb j\u00e4lgida ja mis on siin kirjeldatud. Oleme koodimisstiili koostamisel l\u00e4htunud v\u00f5imalikult algajas\u00f5bralikust l\u00e4henemisest, mis peaks tagama maksimaalset koodi loetavust.<\/p>\n<p>Esmalt kodeerima hakates v\u00f5ivad sellised n\u00f5uded tunduda k\u00fcsitava v\u00e4\u00e4rtusega kui isegi t\u00f6\u00f6tavat programmi on keeruline kirjutada, kuid see ei t\u00e4henda, et stiili ja funktsionaalsust tuleks eraldi k\u00e4sitleda. Need k\u00e4ivad k\u00e4sik\u00e4es ja toetavad \u00fcksteist. Alustades stiilist kinni pidamist kohe esimesest n\u00e4dalast kujuneb see sul n\u00f6 musklim\u00e4llu ja m\u00f5ne aja p\u00e4rast ei pea sa enam sellele teadlikult m\u00f5tlema ega \u00fcmber \u00f5ppima.<\/p>\n<p><strong>M\u00e4rkus:\u00a0Kui sul on juba v\u00e4lja kujunenud koodimisstiil, mis on laialdaselt aktsepteeritud<\/strong> ja mis ei lange t\u00e4ielikult kokku siin kirjeldatuga (n\u00e4iteks ettev\u00f5ttes kus t\u00f6\u00f6tad), v\u00f5ib seda kasutada. Sellegipoolest tuleb j\u00e4lgida parimaid praktikaid, isegi kui varasemalt pole k\u00f5iki neist rakendatud. N\u00e4iteks v\u00f5ivad erineda sinu muutujate kirjutamise stiil (snake_case) v\u00f5i loogeliste sulgude asukoht (rea l\u00f5pus, mitte eraldi real).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Koodirea_pikkus\"><\/span>Koodirea pikkus<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Klassikaliselt on soovitav koodirea pikkus 80 t\u00e4hem\u00e4rki. See tuleb ajalooliselt monitoride v\u00f5imekusest kuvada 80 t\u00e4hem\u00e4rki rea kohta.<\/p>\n<p>Kuna tehnika on vahepeal oluliselt arenenud, siis Programmeerimine 1 ja 2 kursustes on tegu rangelt soovitatava pikkusega (tulevane t\u00f6\u00f6andja nii leebe ei pruugi olla). St kui l\u00e4hed m\u00f5ne t\u00e4hem\u00e4rgi \u00fcle, siis sellest veel numbrit ei tehta. K\u00fcll aga 90 ja enama t\u00e4hem\u00e4rgi korral tuleb\u00a0 juba kas ridu poolitada v\u00f5i koodi \u00fcmber struktureerida!<\/p>\n<p>Koodirea pikkuse j\u00e4lgimiseks veendu, et su koodiredaktor kuvaks sulle rea pikkuse kohta indikaatori.<\/p>\n<p>N\u00e4iteks Geany puhul: Edit -&gt; Preferences -&gt; Editor -&gt; Display<br \/>\nVali\u00a0<strong>Long line marker: Enabled<\/strong>\u00a0ja\u00a0<strong>column: 80<\/strong><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Koodirea_poolitamine\"><\/span>Koodirea poolitamine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>C keel ei hooli \u00fcldiselt t\u00fchikutest ja tabidest, seega poolitada ridu saame ilma \u00fchtegi lisas\u00fcmbolit kasutamata. Ridade poolitamine on osaliselt reguleeritud aga osaliselt loominguline, et tulemus j\u00e4\u00e4ks loetav.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">\/\/ Printing the contents of the structure\r\nprintf(\"%7d %4s %10s %10s %2d.%2d.%4d\\n\", student.id,\r\n    student.field, student.fName, student.lName,\r\n    student.birthday.day, student.birthday.month,\r\n    student.birthday.year);\r\nprintf(\"End of structure\");\r\n\r\n\/\/ Long equations example\r\nx1 = (-linearCoefficient + sqrt((linearCoefficient * linearCoefficient) - \r\n                               (4 * quadraticCoefficient * constant))) \/\r\n                               (2 * quadraticCoefficient);\r\nx2 = (-linearCoefficient - sqrt((linearCoefficient * linearCoefficient) - \r\n                               (4 * quadraticCoefficient * constant))) \/\r\n                               (2 * quadraticCoefficient);<\/pre>\n<ul>\n<li>Rida poolita enne 80 t\u00e4hem\u00e4rgi t\u00e4itumist.<\/li>\n<li>Poolitatud read peavad olema trepitud\u00a0<strong>v\u00e4hemalt<\/strong> \u00fche v\u00f5rra.<\/li>\n<li>Ridade poolitamine on osaliselt ka loominguline tegevus. Olenevalt poolitamise iseloomust v\u00f5ib loetavuse huvides olla m\u00f5istlik ka rohkem treppida.<\/li>\n<li>Ridu tasub poolitada operaatorite ees v\u00f5i j\u00e4rel.<\/li>\n<li>J\u00e4rgnevad koodiread\u00a0 j\u00e4tkuvad esialgselt taandelt.<\/li>\n<\/ul>\n<h6><span style=\"color: #ff0000;\">\u00c4ra nii tee:<\/span><\/h6>\n<p>J\u00e4rgnev koodirida on nii pikk, et vajab horisontaalset kerimist ja on raskesti j\u00e4lgitav.<\/p>\n<pre class=\"theme:github-copy toolbar:2 nums:false nums-toggle:false copy:false scroll:true expand:true lang:c decode:true\">printf(\"%s %s %d - got %.2f of the votes\\n\", (candidates + total)-&gt;candidate, (candidates + total)-&gt;party, (candidates + total)-&gt;votes, ((float)(candidates + total)-&gt;votes \/ (float)votes) * 100);<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Sonede_poolitamine\"><\/span>S\u00f5nede poolitamine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>S\u00f5nede poolitamisel kehtivad t\u00e4iendavad reeglid. Nimelt ei tohi s\u00f5ne poolitada jutum\u00e4rkide vahelt lihtsalt rida vahetades.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">\/\/ Splitting strings\r\nprintf(\"This is an extremely long sentence that needs to be split up in \"\r\n       \"order to adhere to the line length requirements.\\n\");<\/pre>\n<ul>\n<li>S\u00f5ne poolitamiseks l\u00f5peta esmalt jutum\u00e4rgid \u00e4ra ja seej\u00e4rel alusta jutum\u00e4rgid uuesti j\u00e4rgmisel real.<\/li>\n<li>Poolitatud s\u00f5ne tuleks alustada samakaugelt kui eelneval real jutum\u00e4rgid algasid.<\/li>\n<li>Alternatiivina v\u00f5ib t\u00fckeldada prinditava teksti mitme funktsioonikutse vahel \u00e4ra.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Koodi_kommenteerimine\"><\/span><span style=\"font-size: 22px; font-weight: bold;\">Koodi kommenteerimine<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Koodi kommenteerimise eesm\u00e4rk on suurendada programmikoodi loetavust ja hallatavust. Programmi kirjutamise hetkel v\u00f5ib tunduda k\u00f5ik \u00e4\u00e4rmiselt lihtne ja arusaadav kuna see on sul parasjagu m\u00f5ttes. Paraku tuleme me enamasti programmide juurde tagasi m\u00f5ne p\u00e4eva, n\u00e4dala, kuu v\u00f5i miks mitte ka aastate p\u00e4rast ning siis on juba v\u00e4ga keeruline kommenteerimata koodi lahti m\u00f5testada. Veel hullem, vigu leida, parandada ja muudatusi sisse viia.<\/p>\n<p>H\u00e4sti kommenteeritud kood pole mitte oluline vaid sinule, vaid tulevikus ka su kolleegidele, kes sinuga koos t\u00f6\u00f6tama peavad ja sama koodibaasi haldavad.<\/p>\n<p>Kommenteerida tuleks eelk\u00f5ige <strong>&#8220;huvitavaid&#8221;<\/strong> koodil\u00f5ike. Arusaam mis on huvitav ja mis mitte tekib kogemusega. Kindlasti ei ole m\u00f5tet igat koodirida kommenteerida &#8211; see teeb koodi loetamatuks. Kommentaarid v\u00f5iksid olla iga m\u00f5ne koodirea j\u00e4rel. <strong>Alustades v\u00f5iksid sihiks v\u00f5tta, et keskmiselt iga 5 koodirea kohta on v\u00e4hemalt 1 kommentaar.\u00a0<\/strong> Kogemuste tekkides n\u00e4ed, et vahel on vaja igale reale kommentaari, vahel aga n\u00e4ed, et 10-20 rea kohta pole \u00fchtegi vaja.<\/p>\n<p>Koodi kommenteerimiseks on mitmeid v\u00f5imalusi:<\/p>\n<ul>\n<li>Eraldi real olev kommentaar<\/li>\n<li>Samal real olev kommentaar<\/li>\n<li data-select-like-a-boss=\"1\">Mitmerealised kommentaarid (vt <a href=\"#style_file_header\">Faili p\u00e4is<\/a>)<\/li>\n<\/ul>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">\/\/ This is a comment on a separate line\r\nif (debug == true)\r\n{\r\n    printf(\"Debugging on\"); \/\/ This is an inline comment\r\n}\r\n<\/pre>\n<ul>\n<li>Soovitav on kommentaar paigutada eelnevale reale iseseisvalt &#8211; sedapidi saavutad k\u00f5ige parema loetavuse.<\/li>\n<li>Kommentaari algust\u00e4hise ja sisu vahel on t\u00fchik.<\/li>\n<li>Kommentaar algab kahe kaldkriipsuga ja l\u00f5ppeb rea l\u00f5ppedes.<\/li>\n<li>Eelista l\u00fchikesi ja konkreetseid kommentaare pikkadele ja lohisevatele.<\/li>\n<li>Pea kinni rea maksimaalsest pikkusest.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Milline_on_hea_ja_milline_halb_kommentaar\"><\/span>Milline on hea ja milline halb kommentaar<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Hea kommentaar selgitab<\/p>\n<ul>\n<li><strong>mida<\/strong> sa teed<\/li>\n<li><strong>miks<\/strong> sa seda teed<\/li>\n<\/ul>\n<p>Kusjuures vastama ei pea m\u00f5lemale k\u00fcsimusele korraga.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">\/\/ Calculate hypotenuse of a right triangle.\r\nfloat hyp = sqrt((base * base) + (height * height));<\/pre>\n<p><span style=\"color: #ff0000;\"><strong>\u00c4ra nii tee! <\/strong><\/span>Halb kommentaar selgitab <strong>kuidas<\/strong> sa seda teed.<\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">\/\/ Add squares of base and height together and take a square root\r\nfloat hyp = sqrt((base * base) + (height * height));<\/pre>\n<p>Halvaks teeb sellise kommentaari see, et esiteks ei anna see mitte midagi uut &#8211; sa kordad juba seda mis on koodis kirjas. Teiseks, kui koodis on viga, siis kommentaar ei selgita mida sa tegelikult teha soovisid &#8211; n\u00e4iteks andes probleemse koodi s\u00f5brale lugemiseks pole v\u00f5imalik tal leida ebak\u00f5la kommentaari ja koodis kirjutatu vahel..<\/p>\n<h4><a title=\"style_file_header\" name=\"style_file_header\"><\/a><\/h4>\n<h3><span class=\"ez-toc-section\" id=\"Faili_pais\"><\/span>Faili p\u00e4is<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>K\u00f5ikide .c ja .h failide p\u00e4isesse tuleks lisada koodifaili ja autori(te) nimed ning l\u00fchike selgitus mida fail sisaldab. Avalike projektide puhul lisatakse reeglina ka autori veebileht ja\/v\u00f5i e-postiaadress.<\/p>\n<p>Sageli lisatakse failidesse ka loomise ja viimase muutmise aeg v\u00f5i faili versiooninumber. Osadel juhtudel hoitakse faili p\u00e4ises ka muudatuste ajalugu, kuid viimasel ajal paikneb see pigem versioonihalduses (Nt Git).<\/p>\n<pre class=\"lang:c decode:true\" data-select-like-a-boss=\"1\">\/**\r\n * File:        singularity.c\r\n * Author:      Risto Heinsar\r\n * Created:     19.08.2014\r\n * Last edit:   27.08.2015\r\n *\r\n * Description: Experimental program to test dividing by\r\n *              zero\r\n *\/\r\n<\/pre>\n<p>Faili p\u00e4ise puhul kasutatakse kommenteerimise viisi, kus kommentaar algab m\u00e4rkidega \/* ja l\u00f5peb m\u00e4rkidega *\/. K\u00f5ik vahepealne loetakse kommentaariks.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Muutujate_deklareerimine_ja_initsialiseerimine\"><\/span>Muutujate deklareerimine ja initsialiseerimine<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">\/\/ Single variable\r\nfloat average;\r\n\r\n\/\/ Declaration and initialization\r\ndouble trackLength = 500.0;\r\n\r\n\/\/ Multiple variable declaration, initialization not allowed\r\nint hours, minutes, seconds;<\/pre>\n<ul>\n<li>Muutujate nimed peaksid kirjeldama nende\u00a0sisu<\/li>\n<li>Nimetamisel kasutame kaamelik\u00fc\u00fcru (<span class=\"lang:default highlight:0 decode:true crayon-inline \">lowerCamelCase<\/span>\u00a0) meetodit &#8211; st \u00fches\u00f5nalised muutujad algavad v\u00e4ikese t\u00e4hega ja mitmes\u00f5naliste puhul on j\u00e4rgnevad s\u00f5nad suure algust\u00e4hega.<\/li>\n<li>\u00dchest t\u00fc\u00fcbist v\u00f5ib deklareerida mitut muutujat, eraldades need koma ja t\u00fchikuga, kuid sellisel juhul ei tohi neid algv\u00e4\u00e4rtustada samal real.<\/li>\n<li><strong>Globaalmuutujate kasutamist tuleb v\u00e4ltida <\/strong>(v\u00e4lja arvatud m\u00f5ned erijuhud).<\/li>\n<li>Muutujad on soovitav deklareerida v\u00f5imalikult l\u00e4hedal kohale, kus neid kasutama hakkad.<\/li>\n<\/ul>\n<h6><span style=\"color: #ff0000;\"><strong>\u00c4ra nii tee!<\/strong><\/span><\/h6>\n<pre class=\"theme:github-copy toolbar:2 nums:false nums-toggle:false copy:false lang:c decode:true\">int a, b, c, x, k, l, m, n;\r\nint items = 6, total, costPerItem = 8;\r\nint viiendaloenduriesimesehulgapikkusesimeseliteratsioonil;<\/pre>\n<ul>\n<li data-select-like-a-boss=\"1\">Esimese rea puhul on v\u00e4ga keeruline aru saada mis muutuja mis eesm\u00e4rki t\u00e4idab.\u00a0 \u00dchet\u00e4helisi muutujaid tuleks v\u00e4ltida enamikes kohtades. \u00dcldjuhul on \u00fchet\u00e4helised muutujad m\u00f5istlikud vaid ts\u00fckliloenduritena v\u00f5i \u00fcldm\u00f5istetavas t\u00e4henduses (nt n &#8211; objektide hulk).<\/li>\n<li>Teise n\u00e4ite puhul on segatud algv\u00e4\u00e4rtustatud ja algv\u00e4\u00e4rtustamata muutujad. K\u00f5ik algv\u00e4\u00e4rtustatud muutujad deklareeri eraldi ridadel, sedasi v\u00e4hendad t\u00f5en\u00e4osust t\u00e4helepanematusest vigu teha.<\/li>\n<li>Viimase n\u00e4ite puhul v\u00f5ib olla tegu k\u00fcll p\u00f5hjaliku kirjeldusega, kuid on loetamatu, kuna s\u00f5nade eraldust pole n\u00e4ha (kaamelik\u00fc\u00fcru meetod!). Samuti tasub kaaluda kui pikk on m\u00f5istlik muutuja nimetus.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Viitmuutujate_deklareerimine_pointer\"><\/span>Viitmuutujate deklareerimine (pointer)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Viitade puhul on olulised samad p\u00f5hireeglid nagu tavaliste muutujate puhul.\u00a0 K\u00fcll aga lisanduvad m\u00f5ned reeglid.<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">\/\/ single pointer\r\nint *pData;\r\n\r\n\/\/ multiple pointers\r\nint *pFirst, *pLast;\r\n<\/pre>\n<ul>\n<li>S\u00fcmbol * paikneb muutuja nime ees<\/li>\n<li>Tavaliselt pannakse viitmuutuja ette v\u00e4ike p t\u00e4ht, n\u00e4itamaks, et tegu on viidaga.<\/li>\n<li>Viitmuutujad deklareeritakse eraldi tavamuutujatest.<\/li>\n<\/ul>\n<h6><span style=\"color: #ff0000;\"><strong>\u00c4ra nii tee!<\/strong><\/span><\/h6>\n<pre class=\"theme:github-copy toolbar:2 nums:false nums-toggle:false copy:false lang:c decode:true\">int* pData;\r\nint* pList, val;<\/pre>\n<ul>\n<li data-select-like-a-boss=\"1\">Pannes t\u00e4rni andmet\u00fc\u00fcbi j\u00e4rele tekitab see petliku mulje, et k\u00f5ik antud real deklareeritavad muutujad on viidad.<\/li>\n<li data-select-like-a-boss=\"1\">Teise rea puhul v\u00f5ib tekkida petlik mulje, et deklareeritakse 2 viitmuutujat. Tegelikult on viit vaid pList. <span class=\"lang:default highlight:0 decode:true crayon-inline \">val<\/span> on tavaline <span class=\"lang:default highlight:0 decode:true crayon-inline \">int<\/span>\u00a0 t\u00fc\u00fcp muutuja. Deklareeri alati viidad eraldi tavalistest muutujatest!<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Arvutused_ja_loogikaavaldised\"><\/span>Arvutused ja loogikaavaldised<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">\/\/ Simple binary math operation\r\na = b + c;\r\n\r\n\/\/ Slightly more complicated math operation\r\naverage = (firstResult + secondResult) \/ 2;\r\n\r\n\/\/ Logic operation. Both binary and unary operators.\r\n(((month == 1) || (month == 2)) &amp;&amp; !holiday)\r\n\r\n\/\/ Unary operation (bitwise inversion)\r\na = ~a\r\n\r\n\/\/ Variable decrement \r\nk--<\/pre>\n<ul>\n<li>K\u00f5ik toimingud, mis kasutavad v\u00e4hemalt 2 operandi tuleb eraldada t\u00fchikutega<\/li>\n<li>Unaarsed operaatorid kirjutatakse kokku operandiga. N\u00e4iteks\u00a0 <span class=\"lang:default highlight:0 decode:true crayon-inline \">!holiday<\/span>\u00a0 ehk NOT holiday, <span class=\"lang:default highlight:0 decode:true crayon-inline \">~a<\/span>\u00a0 ehk INV a (bitikaupa inverteerimine), <span class=\"lang:default highlight:0 decode:true crayon-inline \">k&#8211;<\/span>\u00a0 (dekrementeerimine 1 v\u00f5rra)<\/li>\n<\/ul>\n<h6><span style=\"color: #ff0000;\"><strong>\u00c4ra nii tee!<\/strong><\/span><\/h6>\n<pre class=\"theme:github-copy toolbar:2 nums:false nums-toggle:false copy:false lang:c decode:true\">P=(V2+(C\/d)*1.25)\/tmp+sqrt(x);<\/pre>\n<p>T\u00fchikute puudumise t\u00f5ttu on v\u00e4ga raske j\u00e4lgida tehte korrektset kirjapanekut v\u00f5i seda muuta.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"define_makrod\"><\/span>#define makrod<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">#define DATAPOINTS 10\r\n#define MAX_SIZE 5\r\n#define INPUTFILE \"settings.ini\"<\/pre>\n<ul>\n<li>Nimetus kirjutatakse suurt\u00e4htedes<\/li>\n<li>\u00dcks kasutusvaldkondadest on maagiliste numbrite v\u00e4ltimine koodis<\/li>\n<li>Mitmes\u00f5nalised nimed kirjutatakse altkriipsuga<\/li>\n<\/ul>\n<h6 data-select-like-a-boss=\"1\"><span style=\"color: #ff0000;\"><strong>\u00c4ra nii tee!<\/strong><\/span><\/h6>\n<pre class=\"theme:github-copy toolbar:2 nums:false nums-toggle:false copy:false lang:c decode:true \">#define limit 10\r\n#define ARRAYMINVAL 0\r\n<\/pre>\n<ul>\n<li>Esimesel juhul v\u00f5ib tekkida hilisemalt segadus, et limit v\u00e4\u00e4rtust on v\u00f5imalik muuta, kuna nimetamisstiil on sama nagu deklareeritud muutujatel.<\/li>\n<li>Teisel on taaskord loetavus kehv kuna s\u00f5nade eraldajaid pole n\u00e4ha, olgugi, et kirjeldus on piisav.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Tingimuslaused\"><\/span>Tingimuslaused<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">if (value &lt; 0)\r\n{\r\n    printf(\"Value is negative!\\n\");\r\n}\r\nelse if (value &gt; 0)\r\n{\r\n    printf(\"Value is positive!\\n\");\r\n}\r\nelse\r\n{\r\n    printf(\"Value is zero!\\n\");\r\n}<\/pre>\n<ul>\n<li>Loogelised sulud algavad ja l\u00f5ppevad eraldi real.<\/li>\n<li>Loogelised sulud on samal kaugusel vasakust \u00e4\u00e4rest &#8211; st joonduvad kenasti \u00fcksteise all.<\/li>\n<li>Loogeliste sulgude sisu on 1 v\u00f5rra edasi trepitud (4 t\u00fchikut)<\/li>\n<li>M\u00e4rks\u00f5na <span class=\"lang:default highlight:0 decode:true crayon-inline \">else<\/span>\u00a0 asub eraldi real. <span class=\"lang:default highlight:0 decode:true crayon-inline \">else<\/span>\u00a0 ja eelneva l\u00f5ppeva loogelise vahel t\u00fchja rida ei ole!<\/li>\n<li>M\u00e4rks\u00f5na <span class=\"lang:default highlight:0 decode:true crayon-inline \">if<\/span>\u00a0 j\u00e4rel on 1 t\u00fchik.<\/li>\n<li>Aritmeetiliste ja loogikaoperaatorite (=, +, ==, &lt;=, &lt;, &gt;, ||, &amp;&amp;\u00a0 jne) ees ja j\u00e4rel on \u00fcks t\u00fchik. See ei laiene unaarsete operaatoritele (~, ^, &amp;. |, !)<\/li>\n<\/ul>\n<h6 data-select-like-a-boss=\"1\"><span style=\"color: #ff0000;\"><strong>\u00c4ra nii tee!<\/strong><\/span><\/h6>\n<pre class=\"toolbar:2 nums:false lang:default decode:true\">if (value == 0)\r\n    {\r\n    printf(\"Value is zero!\\n\");\r\n    }\r\n\r\nelse\r\n    {\r\n    printf(\"Value is non-zero!\\n\");\r\n    }<\/pre>\n<ul>\n<li>Loogeliste paigutamine tekitab segadust olenemata j\u00e4rgitavast koodimisstiilist.<\/li>\n<li>T\u00fchi rida enne <span class=\"lang:default highlight:0 decode:true crayon-inline \">else<\/span>\u00a0 m\u00e4rks\u00f5na tekitab olukorra kus seotus eelneva <span class=\"lang:default highlight:0 decode:true crayon-inline \">if<\/span>\u00a0 lausega pole koheselt arusaadav. Samuti tekitab kiusatust sinna vahele m\u00f5ne koodirea kirjutamiseks, mis oleks juba viga.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Switch_lause\"><\/span>Switch lause<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">switch (variable)\r\n{\r\n    case 0:\r\n        \/\/ actions\r\n        break;\r\n    case 1:\r\n        \/\/ actions\r\n        break;\r\n    default:\r\n        \/\/ actions\r\n        break;\r\n}<\/pre>\n<ul>\n<li>M\u00e4rks\u00f5na switch j\u00e4rel on 1 t\u00fchik<\/li>\n<li>M\u00e4rks\u00f5na case ja selle v\u00e4\u00e4rtuse vahel on 1 t\u00fchik<\/li>\n<li>Switch lause sisu on loogeliste vahel. Loogelised on eraldi ridadel ja horisontaalselt joondus (sama nagu if-lause)<\/li>\n<li>switchi sisu on trepitud 1 v\u00f5rra<\/li>\n<li>case sisu on trepitud \u00fche v\u00f5rra<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Treppimine\"><\/span>Treppimine<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Treppimine <em>(indentation)<\/em> on tegevus, mille k\u00e4igus me muudame koodi taanet (kaugus vasakust \u00e4\u00e4rest). Koodi treppimine on oluline loetavuse parendamiseks. Trepitud koodi puhul on hea j\u00e4lgida millised koodiread on millise koodiploki sees.<\/p>\n<p>Treppimise astmeks meie antavates kursustes on valitud 4 t\u00fchikut. Kui kasutad treppimiseks tabulaatori (tab) klahvi on soovitav oma koodiredaktoris see seadistada asenduma 4 t\u00fchikuga. Vastasel juhul v\u00f5ib koode n\u00e4ha v\u00e4lja loetamatu avades m\u00f5ne teise redaktoriga (erinevad koodiredaktorid v\u00f5ivad n\u00e4idata tabi n\u00e4iteks 2, 4 v\u00f5i ka 8 t\u00fchikuga).<\/p>\n<p><strong>V\u00e4ldi tabi ja t\u00fchiku ristkasutust!<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>J\u00e4rgnevalt on esitatud \u00fcks viisakalt trepitud koodi kondikava.<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">int main(void)\r\n{\r\n    while (true)\r\n    {\r\n        if (condition)\r\n        {\r\n            stmt;\r\n            break;\r\n        }\r\n        stmt;\r\n    }\r\n    if (condition)\r\n    {\r\n        stmt;\r\n    }\r\n    stmt;\r\n}<\/pre>\n<p>M\u00e4rka j\u00e4rgnevat:<\/p>\n<ul>\n<li>Koodiplokkide loogelised sulud asetsevad alati \u00fcksteise all. Sedasi on lihtne aru saada mis laused on koodiploki sees.<\/li>\n<li>Algavad ja l\u00f5ppevad loogelised sulud on eraldi ridadel.<\/li>\n<li>Loogeliste sulgude vahele j\u00e4\u00e4v sisu trepitakse \u00fche v\u00f5rra (4 t\u00fchikut)<\/li>\n<li><strong>Vihje:<\/strong> enamikes koodiredaktorites saad taanet suurendada valitud (1 v\u00f5i rohkem) koodiridadel kasutades tab klahvi. Taande v\u00e4hendamiseks valitud ridadel saab kasutada shift+tab klahvikombinatsiooni.<\/li>\n<li><strong>Soovitus:\u00a0<\/strong>Seadista oma koodiredaktor sedasi, et algava sulu j\u00e4rel tekitatakse automaatselt ka l\u00f5ppev sulg. Kui seda v\u00f5imalust pole, tee seda ise! Vastasel juhul v\u00f5ib ununeda m\u00e4rgis. Geany seadistuse soovituses oleme just nii teinud.<\/li>\n<li><strong>Soovitus:<\/strong>\u00a0 lase oma koodiredaktoril ise treppida. Enamik koodiredaktoreid lisab koodi taanet automaatselt kui oled p\u00e4rast algavat loogelist sulgu vajutanud enter klahvi. Sedasi v\u00e4ldid vigu, peavalu ja asjatut manuaalset t\u00f6\u00f6d.<\/li>\n<\/ul>\n<p><span style=\"font-weight: bold; color: #ff0000;\">\u00c4ra nii tee:<\/span><\/p>\n<p>J\u00e4rgneva koodi puhul on v\u00e4ga keeruline aru saada mis laused mille sees asuvad<\/p>\n<pre class=\"theme:github-copy toolbar:2 nums:false nums-toggle:false copy:false lang:c decode:true\">int main(void){\r\nint i;\r\nfor(i=0;i&lt;10;i++)\r\n{\r\nprintf(\"%d is an \");\r\nswitch(i%2)\r\n{\r\ncase 0:\r\nprintf(\"even number\\n\");\r\nbreak;\r\ncase 1:\r\nprintf(\"odd number\\n\");\r\n}\r\n}\r\n}<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Treppimise_sugavus\"><\/span>Treppimise s\u00fcgavus<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><strong>V\u00e4ldi enama kui 3 koodiploki \u00fcksteise sisse paigutamist<\/strong>. Sama piirang kehtib enamikes ettev\u00f5tetes (osades lubatakse ka 4).<\/p>\n<p>Liigne koodiplokkide \u00fcksteise sisse pesastamine muudab koodi raskesti j\u00e4lgitavaks. Lahenduseks on koodi \u00fcmber organiseerimine (refaktoriseerimine). N\u00e4iteks v\u00f5ib osa koodist paigutada funktsiooni, pesastatud tingimuslaused saab kokku kirjutada ning osa koodis olevatest lausetes v\u00f5ib olla v\u00f5imalik \u00fcmber paigutada.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Tsuklid\"><\/span>Ts\u00fcklid<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">while (condition)\r\n{\r\n    \/\/ loop this\r\n}<\/pre>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">do\r\n{\r\n    \/\/ loop this\r\n}\r\nwhile (condition);<\/pre>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">for (int i = 0; i &lt; n; i++) \r\n{\r\n    printf(\"%d\\n\", i);\r\n}\r\n<\/pre>\n<ul>\n<li>M\u00e4rks\u00f5nade <span class=\"lang:default highlight:0 decode:true crayon-inline\">while<\/span>\u00a0 ja <span class=\"lang:default highlight:0 decode:true crayon-inline \">for<\/span>\u00a0 j\u00e4rel on 1 t\u00fchik<\/li>\n<li>Loogelised sulud on samal kaugusel (horisontaalselt joondus), eraldiseisvatel ridadel<\/li>\n<li>Loogeliste sulgude vahele j\u00e4\u00e4va koodiploki read on trepitud 1 v\u00f5rra.<\/li>\n<li>M\u00e4rka kindlasti ka <span class=\"lang:default highlight:0 decode:true crayon-inline \">for<\/span>\u00a0 lauses semikoolonite j\u00e4rel ja operaatorite ees ja j\u00e4rel olevaid t\u00fchikuid.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Pesastatud_for_tsuklid\"><\/span>Pesastatud for ts\u00fcklid<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Ts\u00fckleid \u00fcksteise sisse paigutades tuleb j\u00e4lgida treppimist. Iga j\u00e4rgnev koodiplokk viib taanet 1 v\u00f5rra edasi.<\/p>\n<pre class=\"toolbar:2 nums:false lang:default decode:true \">for (int i = 0; i &lt; n; i++)\r\n{\r\n    for (int j = 0; j &lt; m; j++)\r\n    {\r\n        printf(\"%d %d\\n\", i, j);\r\n    }\r\n}<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"_Funktsioonid\"><\/span>\u00a0Funktsioonid<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"_main_funktisoon\"><\/span>\u00a0main() funktisoon<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Kirjuta sulgude vahele <span class=\"lang:c highlight:0 decode:true crayon-inline\">void<\/span> , kui programm ei kasuta k\u00e4surealt edastatavaid argumente.<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">int main(void)\r\n{\r\n    \/\/ Code\r\n}<\/pre>\n<p>Kirjuta sulgude vahele parameetrid <span class=\"lang:c highlight:0 decode:true crayon-inline\">argc<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline\">argv<\/span>\u00a0 ainult siis, kui programm kasutab t\u00f6\u00f6s k\u00e4sureaargumente (nt terminalist)<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">int main(int argc, char *argv[])\r\n{\r\n    \/\/ Code\r\n}<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"_Enda_loodud_funktsioonid\"><\/span><a title=\"style_anchor_function\" name=\"style_anchor_function\"><\/a>\u00a0Enda loodud funktsioonid<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">float CalcPowerConsumption(float current, float voltage)\r\n{\r\n    float power = current * voltage;\r\n    return power;\r\n}<\/pre>\n<ul>\n<li>Funktsiooni nimest peab olema v\u00f5imalik v\u00e4lja lugeda mida see teeb.<\/li>\n<li>Funktsioonide nimetamisel on \u00f5ppeaines kaks lubatud stiili\n<ul>\n<li>K\u00f5ik s\u00f5nad kirjutatakse suure algust\u00e4hega kaamelik\u00fc\u00fcru stiilis (<span class=\"lang:default highlight:0 decode:true crayon-inline\">UpperCamelCase<\/span> , tuntud ka kui <span class=\"lang:c highlight:0 decode:true crayon-inline \">PascalCase<\/span>\u00a0), eelistatud eristamaks funktsioone muutujatest ma makroteks<\/li>\n<li>K\u00f5ik s\u00f5nad kirjutatakse v\u00e4iket\u00e4htedega, allkriips vahel (<span class=\"lang:c highlight:0 decode:true crayon-inline \">snake_case<\/span> ). Tegu on laialtlevinud stiiliga C keele jaoks. NB! Siis peavad ka muutujad olema samas stiilis!<\/li>\n<\/ul>\n<\/li>\n<li>Enda loodud funktsioonidel peab olema protot\u00fc\u00fcp, mis paikneb kas samas failis enne main() funktsiooni v\u00f5i eraldi p\u00e4isefailis.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Funktsiooni_nimetamise_pohimotted\"><\/span>Funktsiooni nimetamise p\u00f5him\u00f5tted<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Funktsiooni nimi peab kirjeldama mida funktsioon teeb. Enamasti on funktsiooni esimeseks s\u00f5naks tegus\u00f5na. N\u00e4iteks<\/p>\n<ul>\n<li><span class=\"lang:c highlight:0 decode:true crayon-inline\">ReadUsersFromFile()<\/span><\/li>\n<li><span class=\"lang:c highlight:0 decode:true crayon-inline\">CalculateAverageSalary()<\/span><\/li>\n<li><span class=\"lang:c highlight:0 decode:true crayon-inline\">GetTemperature()<\/span><\/li>\n<\/ul>\n<p>T\u00f5ev\u00e4\u00e4rtust (<span class=\"lang:c highlight:0 decode:true crayon-inline \">bool<\/span> ; t\u00f5ene\/v\u00e4\u00e4r; jah\/ei) tagastavad funktsioonid algavad s\u00f5nadega &#8220;Is&#8221;, &#8220;has&#8221;, &#8230;. &#8211; funktsiooni nimi peab olema loetav jah\/ei vastusega k\u00fcsimusena.<\/p>\n<ul>\n<li><span class=\"lang:c highlight:0 decode:true crayon-inline\">IsDateValid()<\/span><\/li>\n<li><span class=\"lang:c highlight:0 decode:true crayon-inline\">IsUserAuthenticated()<\/span><\/li>\n<\/ul>\n<p>Ole nimetamisega l\u00e4biv \u00fcle kogu programmi!<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Funktsiooni_kommentaarid\"><\/span>Funktsiooni kommentaarid<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Funktsioonile peab alati eelnema kommentaar, mis annab selge arusaama mida funktsioon teeb (detailsemalt). Olenevalt funktsiooni keerukusest v\u00f5ib kasutada kas standartset v\u00f5i lihtsustatud kuju.<\/p>\n<h5>Standartne funktsiooni kommentaari kuju<\/h5>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">\/**\r\n * Description:    Asks the user for an integer in between the given limits.\r\n *                 Repeats until requirements are met and then returns the number.\r\n *                 Outputs a warning when input is out of range\r\n *\r\n * Parameters:     min - lower limit for the user input (inclusive)\r\n *                 max - upper limit for the user input (inclusive)\r\n *\r\n * Return:         Returns an integer within the specified limits\r\n *\/\r\nint GetIntInRange(int min, int max)\r\n{\r\n    int num;\r\n    \r\n    while (1)\r\n    {\r\n        printf(\"&gt; \");\r\n        scanf(\"%d\", &amp;num);\r\n        \r\n        \/\/ Break the loop if input is within expected range\r\n        if (num &gt;= min &amp;&amp; &lt;= max)\r\n        {\r\n            break;\r\n        }\r\n        \r\n        \/\/ Print error when input was not in range\r\n        printf(\"\\nRetry! Input must be in between %d and %d\\n\", min, max);\r\n    }\r\n    \r\n    return num;\r\n}<\/pre>\n<ul>\n<li>Kirjeldus &#8211; sisaldab funktsiooni eesm\u00e4rki, t\u00f6\u00f6p\u00f5him\u00f5tteid, piiranguid. Kui funktsiooni k\u00e4igus muudetakse andmeid, mis pole funktsioonile lokaalsed, siis see tuleb samuti kirja panna (nt massiivid)<\/li>\n<li>Funktsiooni parameetrid &#8211; nende nimed ja v\u00e4\u00e4rtuse t\u00e4henduslikkus antud funktsioonis. Kui eksisteerivad, siis ka piirangud (eeltingimused) v\u00e4\u00e4rtustele<\/li>\n<li>Funktsiooni poolt tagastatav v\u00e4\u00e4rtus &#8211; andmet\u00fc\u00fcp ja selle t\u00e4henduslikkus<\/li>\n<\/ul>\n<h5>Lihtne kommentaari kuju<\/h5>\n<p>Antud kommentaari kuju tohib kasutada vaid v\u00e4ga lihtsate funktsioonide puhul.<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">\/**\r\n * Function to calculate the power consumption given\r\n * the voltage and current the circuit is using.\r\n *\/\r\nfloat CalcPowerConsumption(float current, float voltage)\r\n{\r\n    return (current * voltage);\r\n}<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Funktsiooni_prototuup\"><\/span>Funktsiooni protot\u00fc\u00fcp<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Enda loodud funktsioonide puhul tuleb kirjeldada funktsiooni protot\u00fc\u00fcp. Funktsiooni protot\u00fc\u00fcbid paiknevad vahetult enne <span class=\"lang:default highlight:0 decode:true crayon-inline \">main()<\/span>\u00a0 funktsiooni v\u00f5i eraldi p\u00e4isefailis.<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">float CalcPowerConsumption(float current, float voltage);<\/pre>\n<ul>\n<li>Protot\u00fc\u00fcp kirjeldab \u00e4ra funktsiooni tagastuse, nime ja parameetrid (andmet\u00fc\u00fcp ja nimi).<\/li>\n<li>Funktsiooni protot\u00fc\u00fcp on sisuliselt koopia funktsiooni p\u00e4isest selle deklaratsiooni juures.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Loendid_ehk_enumeration\"><\/span>Loendid ehk <em>enumeration<\/em><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Loendite nimetamise stiiliks kasuta\u00a0 <span class=\"lang:default highlight:0 decode:true crayon-inline\">PascalCase<\/span>\u00a0 &#8211; iga s\u00f5na algab suurt\u00e4hega, k\u00f5ik s\u00f5nad kirjutatakse kokku. Nimed kirjutatakse ainsuses.<\/p>\n<p>Loendi tunnuste nimetamiseks kasuta <span class=\"lang:default highlight:0 decode:true crayon-inline\">SCREAMING_SNAKE_CASE<\/span>\u00a0 &#8211; st k\u00f5ik suurt\u00e4hed, s\u00f5nade vahel allkriips.<\/p>\n<p>Kasutada v\u00f5ib \u00fcherealist definitsiooni<\/p>\n<pre class=\"toolbar:2 nums:false lang:default decode:true\">enum SystemStatus {STATUS_OFF, STATUS_IDLE, STATUS_BUSY};<\/pre>\n<p>v\u00f5i mitmerealist definitsiooni<\/p>\n<pre class=\"toolbar:2 nums:false lang:default decode:true\">enum SystemStatus \r\n{\r\n    STATUS_OFF,\r\n    STATUS_IDLE, \r\n    STATUS_BUSY\r\n};<\/pre>\n<p>NB! V\u00e4ldi loendite t\u00fc\u00fcbi \u00fcmberdefineerimist (<span class=\"lang:default highlight:0 decode:true crayon-inline\">typedef<\/span> ) kuna see peidab informatsiooni.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kirjed_ehk_struktuurid_struct\"><\/span>Kirjed ehk struktuurid (<em>struct<\/em>)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Struktuuride nimetamisel kasutatakse samu reegleid nagu loendite nimetamisel. St nimetus on ainsuses, kirjastiiliks kasuta <span class=\"lang:c highlight:0 decode:true crayon-inline\">PascalCase<\/span> . Struktuuri liikmed nimetamisel kasuta sama stiili nagu muutujate nimetamisel.<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">struct Person\r\n{\r\n    char *fName;\r\n    char *lName\r\n    uint_64t identityCode;\r\n};<\/pre>\n<p><strong>\u00c4ra kasuta<\/strong> nimetamisel l\u00f5ppu <span class=\"lang:c highlight:0 decode:true crayon-inline \">_t<\/span> ! See on reserveeritud keele sisemiste t\u00fc\u00fcpide jaoks ning v\u00f5ib tekitada ootamatuid konflikte!<\/p>\n<p>Soovi korral v\u00f5id kasutada struktuuride \u00fcmbernimetamist <span class=\"lang:c highlight:0 decode:true crayon-inline \">typedef<\/span>\u00a0 abil. Arvesta, et olenevalt projekti reeglitele v\u00f5idakse seda pidada halvaks tavaks kuna \u00fcmbernimetamise tulemusel toimub informatsiooni peitmine &#8211; nimest kaob teadmine, et tegu on struktuuriga!<\/p>\n<pre class=\"toolbar:2 striped:false marking:false nums:false nums-toggle:false lang:c decode:true\">typedef struct Person\r\n{\r\n    char *fName;\r\n    char *lName\r\n    uint_64t identityCode;\r\n} Person;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Sissejuhatus Koodimisstiil on dokument, mille eesm\u00e4rk on kirjeldada missugune peaks kirjutatud programmikood v\u00e4lja n\u00e4gema. Stiili j\u00e4lgimise peamine eesm\u00e4rk on parandada koodi loetavust ja tagada \u00fchtlane stiilikasutus \u00fcle kogu programmi. Parem loetavus t\u00e4idab ka mitmeid varjatud eesm\u00e4rke &#8211; n\u00e4iteks on koodist vigu oluliselt lihtsam leida, seda nii sul endal kui ka sind abistavatel v\u00f5i sinuga koos &hellip; <a href=\"https:\/\/blue.pri.ee\/ttu\/koodimisjuhendid\/koodimisstiil\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Koodimisstiil<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":5274,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"page-templates\/code-width.php","meta":{"footnotes":""},"class_list":["post-4","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/4","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/comments?post=4"}],"version-history":[{"count":10,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/4\/revisions"}],"predecessor-version":[{"id":11421,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/4\/revisions\/11421"}],"up":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/pages\/5274"}],"wp:attachment":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/media?parent=4"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}