[itk] Számítástechnika kezdőknek

C++ programozás kezdőknek - megjegyzések (kommentek) a forráskódban

[2020. november 15.] [ christo161 ]

A forráskód szövegében bárhol elhelyezhetünk olyan sorokat, vagy szövegrészeket, amiknek nem lesz hatása a program működésére, vagy másképp fogalmazva a fordító nem kísérli meg futtathatóvá alakítani őket, csak a forrásfájlokban léteznek. Ezeket a programozók feljegyzései a forráskódban, ezeket hívjuk kommenteknek.

Előző tananyagrész: első program
Következő tananyagrész: várakozás enter billentyű megnyomásáig

Mire használhatjuk a kommenteket?

  • Egyes kódrészletek működésének leírására, hogy mások könnyebben megértsék vagy később majd mi értsük meg könnyebben.
  • Készítőkkel kapcsolatos információk, jogi információk (pl. nyílt forráskódú szoftverek forráskódjában)
  • Kódrészletek tervezett továbbfejlesztésének, átalakításának jelölésére (angolul todo vagy fixme).
  • Tesztelésnél/debuggolásnál hasznos lehet, ha bizonyos kódrészleteket ideiglenesen kikommentelünk.
  • Ha ki akarunk cserélni egy kódrészletet új verzióra, akkor a régit nem muszáj kitörölni, hanem addig kikommentelve megtarthatjuk, ameddig az új nem működik. Illetve félkész kódrészleteket is kikommentelhetünk addig, amíg a kód már működő részeit próbálgatjuk.

Mikor nem használunk kommenteket?

  • Idézőjelek közé írt szövegekben (úgynevezett string literálokban) a kommentelésre használt jelöléseknek nincs hatása.
  • Nyelvi elemek, szintaxis magyarázására csak tanulóknak szóló példaprogramokban használunk kommenteket. Pl. ez itt egy tömb, ez itt egy függvény, ítt most kezdőértéket adunk a tömbnek, itt pedig átadjuk a tömböt a függvénynek, satöbbi.
    Nem tanulásra szánt kódot valószínűleg olyanok olvasnak, akiktől elvárt, hogy tisztában legyenek egy nyelv szintaxisával.
  • Elemi műveletek leírása szavakkal. Pl. a-hoz hozzáadjuk b értékét.
  • Nagyobb projektekben jó eséllyel kikommentelt kódrészletekkel nem találkozhatunk, hiszen a különböző verziójú kódok elkülönítésére verziókezelő rendszereket (pl. git, svn, cvs) használnak, ahol meg kell fogalmazni, hogy az egymást követő verziók között mi a különbség, mely leírások (a kódban elvégzett módosításokkal együtt) később visszakereshetőek lesznek.

A C++ nyelvben két jelölés használható kommentelésre:

Az egyik kommentelésre használható jelölés:
//

Egysoros komment, angolul single-line comment. C++ stílusú kommentnek is szokták nevezni, mivel a C nyelv csak később vette át a C++-ból.
Nem kötelező a sor elején kezdeni, adott sor végéig tart, ha a sor végén nincs \ jel. Ha egy // kommentet tartalmazó sor végén \ jel van, akkor a // komment hatása a következő sorra is érvényes lesz.
Kerülendő // kommentet tartalmazó sor végére \ jelet írni, és ezáltal többsoros kommentet csinálni az alapvetően egysoros kommentelésre kitalált // kommentekből. Ha a \ jel nem az utolsó karakter a sor végén (pl. vannak utána még szóközök), az egyes fordítók, fejlesztői környezetek esetén hibát okozhat.

Példák:

#include <iostream> //std::cout, std::cin, std::cerr, std::clog
//a program belepesi pontja:
int main() {
	//utasitas1;
	//utasitas2;
	//utasitas3; \
	return 0;
}

Bármilyen hosszú is egy sor, az egysoros komment szempontjából az tekintendő a sor végének, ahol pl. megnyomtuk az enter billentyűt.
Ha egy szövegszerkesztőben, vagy egy honlapon olvasunk forráskódot, előfordulhat, hogy több sorba lesznek tördelve (word wrap) az egysoros kommentek ha túl hosszú az adott sor.

itk_cpp_source_code_word_wrap_compare.png

A másik kommentelésre használható jelölés:
/**/

Többsoros komment, angolul inline, multi-line, esetleg block comment. C stílusú kommentnek is szokták nevezni, mert a C programozási nyelvben egy ideig csak ez volt a szabványos.
A /* karakterektől a */ karakterekig tart, vagy lezáró karakterek hiánya esetén az adott forrásfájl végéig. Nem kötelező sor elején kezdeni vagy sor végén lezárni.
Példák:

/*Az elso programom.
Nevem: Kovacs Adam
Ez a program azt csinalja, hogy...*/

std::cout << 'a' /* << ' ' << 'b' */ << '\n';

Fontos: kettő vagy több /**/ komment nem ágyazható egymásba (angolul cannot be nested), vagyis a nyitó (/*) és záró (*/) karakterek között nem szerepelhetnek újabb záró karakterek (kivéve persze, ha a két egymásba ágyazott /**/ komment például // kommenten/kommenteken belül van). Például:

// Forditasi hiba:
/*std::cout << "Hello World!" << '\n';
/*std::cout << "Hello\nWorld!\n";*/
return 0;*/

Másik példa:

// Forditasi hiba:
/*/**/*/
// Nem okoz hibat:
// /*/**/*/

Ötletek kommenteléshez

Noha nem muszáj a sor elején kezdeni a kommenteket, de ha lehet, érdemes inkább külön sorba írni őket az átláthatóság érdekében. Például:

//nem annyira atlathato:
std::cout << "hosszu szoveg" << '\n'; //komment

//atlathatobb:
//komment
std::cout << "hosszu szoveg" << '\n';

Ha egy többsoros kommentben utasítások szerepelnek, a záró karakterek elé szoktak újabb nyitó karaktereket is elhelyezni, hogy ha töröljük az első nyitó karaktereket, akkor ne kelljen a záró karaktereket is törölni ahhoz, hogy ne legyen fordítási hiba. Példa:

/*
utasitasok
/**/

A // kommenteket használhatjuk kommentelésre, a /**/ kommenteket pedig kódrészletek kikommentelésre.

Ha ideiglenesen módosítjuk a kódot, azért, hogy kipróbáljuk, hogy a módosítással hogyan működik a program, akkor kommentek formájában elhelyezhetünk keresőszavakat (pl. debug), amikre rákeresve később könnyebben megtalálhatjuk a forráskódban azokat a részeket, amiket módosítuttunk (és mondjuk vissza szeretnénk vonni a módosításokat).

//debug
//modositott vagy kikommentelt utasitas

Kódrészlet figyelmen kívül hagyása a preprocesszorral

Ha egy kódrészletet (külön sorba írt) #if 0 és #endif preprocesszor direktívák közé helyezünk el, akkor az végeredményben hasonlóan fog hatni, mintha /**/ kommenttel kikommenteltük volna.

#if 0
std::cout << "ez az utasitas itt nem hajtodik vegre" << '\n';
#endif

Nem írható egy sorba:

// forditasi hiba:
#if 0 std::cout << "preprocesszor direktivakat kulon sorba kell irni"; #endif

Hasonlóképp nem ágyazható egymásba, mint a többsoros komment.

// forditasi hiba:
#if 0
std::cout << "valami" << '\n';
#endif
std::cout << "hiba" << '\n';
#endif

Ezt a módszert például akkor használjuk, ha azt szeretnénk, hogy /**/ kommenteket is tartalmazó hosszú kódrészlet ne kerüljön lefordításra (ugyebár a /**/ kommentek nem ágyazhatóak egymásba).
Fontos: ezt a módszert csak teszteléshez/debuggoláshoz, illetve példaprogramokban, otthoni projektekben, saját célra használjuk.

Dokumentációs kommentek

Elképzelhető, hogy ilyen kommentekkel is találkozunk:

/**
 * dokumentacios komment
 */
/*!
 * dokumentacios komment
 */
///
/// dokumentacios komment
///

További dokumentációs komment példák

Ezek a fordítás szempontból ugyanolyan szerepet töltenek be, mint a fentebb felsoroltak, viszont dokumentációkészítő rendszer felhasználhatja a tartalmukat.

További dokumentációs kommentek készítésére használható eszközök

Egyéb kapcsolódó tananyag

Ebben a cikkben alaposabban le van írva, hogy milyen esetekben használjunk kommenteket:
learncpp.com - comments

Előző tananyagrész: első program
Következő tananyagrész: várakozás enter billentyű megnyomásáig

A bejegyzés trackback címe:

https://itkezdoknek.blog.hu/api/trackback/id/tr1816286136

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása