Code::Blocks letöltési és telepítési tudnivalók; első tapasztalatok szerzése a Code::Blocks környezetről; forrásfájl, futtatható kód
{esszé}
A programkészítési folyamat lépései közül soroljon föl legalább ötöt!
{/esszé}
{esszé}
Az algoritmus fogalmát 5 fontos kijelentéssel határoztuk meg. Mik ezek?
{/esszé}
{esszé}
Az algoritmus mely 3 összeállítási módját említettük az előző leckében?
{/esszé}
Windows környezetben (ez az ajánlott) a letöltő anyag eleve tartalmazza az ajánlott fordítóprogramot és a nyomkövető rendszert. A telepítés – természetesen – rendszergazdai jogokat igényel, de a súgója végig vezeti a telepítőt. Kb. 100 MB (megabájt) lemezterületet igényel.
Az elkövetkezőkben a Windows környezetben futó Code::Blocks keretrendszerről lesz szó.
A Code::Blocks első elindításakor történik a fordítóprogram hozzárendelése. Ekkor jelzi ki, hogy mely – számára felismerhető – C vagy C++ fordítóprogramok találhatók a lemezen, és választásra kínálja, hogy melyik legyen a feltételezett.
Projekt létrehozása azért lényeges, mert a létrehozandó program több fájlból álló rendszert alkot. Például lehet több forrásfájl (C++ nyelvű programot tartalmazó fájl) is (legalább egy, általában main.cpp nevű van), amelyekből a fordítóprogram készít ún. félig lefordított, o kiterjesztésű (ún. object) fájl(okat), majd a futatható kódot (tehát a processzor számára érthető gépi utasításokat) tartalmazó, exe kiterjesztésű fájlt. Hogy ez a sok fájl ne keveredjen se egymással, se más programok fájljaival, külön, sajátos könyvtárrendszerbe csoportosítja a Code::Blocks. Többek közt ennek leírását jelenti a projekt, amelyet egy külön fájlban (cbp←Code Blocks Project) tárol.
A Create a new project linkre kattintva, megjelenik egy választék arról, hogy milyen alkalmazás elkészítéséhez kell a projektet létrehozni. A mi esetünkben ez egy ún. konzolalkalmazás (Console Application) lesz.
Miután a C++ nyelvet kiválasztottuk, az ezt követő lépések a munkakörnyezet (könyvtárszerkezet) felépítését célozzák.
A projektnév kitöltése után annak a könyvtárnak a kiválasztása következik, amelyből (mint szülőkönyvtárból) nyílik a projekt nevével megegyező könyvtárunk a készítendő alkalmazásunk számára. Ebből nyílnak majd a speciális fájljainkat tartalmazó további könyvtárak. Egy lehetséges kitöltés példája:
A fenti paraméterezés szerint a projektünket leíró fájl az elsoprogram.cbp lesz. Továbblépve döntünk a fordítóprogramról. Az opcionálisat kínálja föl egyből, amit most el is fogadunk. Az alábbi ábra mutatja, hogy beállítható még a futtatható, illetve a félig lefordított kódot tartalmazó fájl alkönyvtárának neve. Ezt érdemes a felkínáltnak megfelelően elfogadni.
Az ábra elárulja azt az érdekességet is, hogy mód van kétféle célra fejleszteni a programot. Fejlesztés alatt jó, ha a kód tartalmaz olyan információkat is, amely támogatja a nyomkövető programot (debugger). Ennek a kódjai (futtatható és object) kerülnek a Debug részben beállítottakba. A véglegesben már csak a minimálisan szükséges kódok találhatók. Ezek a fájlok a Release részben beállított alkönyvtár-párba kerülnek.
A Code::Blocks környezet kész a programszerkesztésre.
A bal oldali rész Sources-ét kinyitva és duplán rákattintva a láthatóvá váló main.cpp-re, a jobb oldali részben egy kész, további mintául szolgáló program forrása jelenik meg.
E program egy tipikus, ún. helló világ program, amely szintaktikusan is, és szemantikusan is helyes. Fordítsuk le, azaz a Build menü Build menüpontjára vagy közvetlenül az eszközkészlet, fogaskereket mintázó ikonjára kattintsunk rá. A fordítás eredményeként a jobb oldali alsó ablaktartományban jelenik meg a fordító üzenete, többek közt, hogy 0 errors, 0 warnings.
Nézzük meg, hogy ekkorra a munkakönyvtárunk szerkezete elvárásunknak megfelelően alakult-e, valamint hogy milyen fájlokat tartalmaznak! Rajzoljuk fel a kialakult könyvtárszerkezetet! Érdemes az egyes fájlok tartalmát, valamilyen egyszerű szövegszerkesztővel (pl. jegyzettömb) belülről is megnézni. Mit tapasztalt, melyek tartalmaztak olvasható információkat, melyek voltak megfejthetetlenek?
Az ismerkedés utolsó lépéseként, nézzük meg, mit is csinál a gyári program! A futtatás következik: rákattintva a Build menü Run menüpontjára (vagy a zöld háromszögre) az alábbi ablak nyílik ki.
Felismerhető benne az amúgy is sejthető programüzenet: Hello world!. A mintaprogram tevékenysége után megjelenő további üzeneteket a Code::Blocks teszi hozzá, amivel megakadályozza, hogy a konzolalkalmazásunk ablaka még az előtt becsukódjék, hogy elolvashatnánk a programunk sokat mondó üzenetét.
A bin/Debug könyvtárban keletkezett futtatható kódot (elsoprogram.exe) közvetlenül, az operációs rendszerben is indítsuk el! Mi tapasztalható?
A munkakönyvtáron belül hány olyan fájlt talált, amely nevében felismerhető a projekt neve (most az elsoprogram)?
Keresse meg azt a menüpontot, amellyel választani tud az ún. debug (azaz fejlesztés alatt álló) és az ún. release (végleges) változat között!
Ugye megtalálta: Build+Select?
Tárgykódként (azaz futtatható kódként) a véglegeset kiválasztva végezze el az újrafordítást! Ehhez használja a Build+Rebuild menüpontot! Ezután vesse össze a két (bin/Debug és bin/Release) könyvtárbeli exe-k méretét!
A továbbiak nem nélkülözhetetlen tudni valókat jelentenek, de igen hasznos lesz a későbbi programfejlesztési munkálatok során. Az egyik ilyen kialakítandó szokás a program kísérő információinak elhelyezésére, a másik a több lépcsőben történő fejlesztés egyfajta támogatási lehetőségére vonatkozik.
A programba célszerű elhelyezni a szerzőről és a feladatról néhány ismeretet. A szerző neve mellett EHA-kódját, email-címét. A feladatról az informális szövegét, és nagyon jó szolgálatot tehet a specifikációja.
Mindezeket, természetesen, a forrásprogramba ún. kommentként, megjegyzésként (azaz a fordítóprogram számára kihagyandó információként) illesszük be a program nyitó sorai gyanánt. Például így:
//Név: Szlávi Péter //ETR-AZONOSÍTÓ: SZPKAFT.ELTE //MAIL: szlavip@elte.hu //Feladat: … itt a szöveg … // … itt a szöveg folytatása, akár több soron keresztül… //Specifikáció: //Bemenet: … itt a specifikáció bemeneti része… //Kimenet: … itt a specifikáció kimeneti része… //Előfeltétel: … itt a specifikáció előfeltételi része… //Utófeltétel: … itt a specifikáció utófeltételéli része… //Definíció: … itt a specifikáció definíció része… // #include <iostream> …
Ha az a célunk, hogy a fenti sablont minden később szerkesztett programunkba beillesszük, akkor ehhez a Code::Blocks segítséget is tud adni. Annak érdekében, hogy legalább a változatlan részeit e kommentsorozatnak ne kelljen minduntalan bebillentyűznünk, ún. sablonként (template) kimentjük: File+Save project as user-template… menüpont, majd a sablon nevét megadjuk. Így kerül kimentésre a merevlemezünk (a Code::Blocks saját munkaterületére. Sajnos ebből a filozófiából az is következik, hogy csak az általuk állandóan használt gépen lehet élni ezzel a gépelést spóroló lehetőséggel.
A sablon betöltése sem bonyolult: New+From template…, majd a sablon kiválasztása (az addigra kimentett esetleg több közül), és a már megszokott munkakörnyezet létrehozó szertartás következik.
Derítse ki, hova és milyen fájlok kerültek a sablon gyanánt kimentésre! Segítségként: az Ön személyéhez kötődő információk közt kell keresnie a rendszerterületen!
A programfejlesztés, ha csak a kódolással összefüggő résztevékenységre gondolunk, akkor is több fordulót igénylő tevékenység. Annak érdekében, hogy egy-egy félbe hagyott fejlesztési lépés torzó ne maradjon, érdemes emlékeztetőket elhelyezni magában a kódba. Ehhez az óhajunkhoz is nyújt segédkezet a keretrendszer az ún. TODO-kkal. A TODO, azaz to do (magyarul teendő, megcsinálandó) nem más, mint egy speciális kommentfajta a forráskódban. Alakja: {forraskodbe}//TODO … az emlékeztető szöveg …{/forraskodbe}
Egy tipikus programdarab, amelyet az előbbi sablon bővítésével nyertünk (és sablonként mentettünk ki), az alábbi:
//Név: Szlávi Péter //ETR-AZONOSÍTÓ: SZPKAFT.ELTE //MAIL: szlavip@elte.hu //Feladat: … itt a szöveg … // … itt a szöveg folytatása, akár több soron keresztül… //Specifikáció: //Bemenet: … itt a specifikáció bemeneti része… //Kimenet: … itt a specifikáció kimeneti része… //Előfeltétel: … itt a specifikáció előfeltételi része… //Utófeltétel: … itt a specifikáció utófeltételéli része… //Definíció: … itt a specifikáció definíció része… // //TODO a feladatszöveg kitöltése //TODO a specifikáció megalkotása //TODO … // #include <iostream> …
Természetesen további TODO-kat is el lehet helyezni a legkülönfélébb kódrészeknél. Például ilyeneket:
… cout<<"N:"; cin>>N; //TODO ellenőrzéssel bővítendő a beolvasás … for (int i=0; i<N; ++i) //TODO a ciklus-szervezés még meggondolandó { …
A kérdés csak az, miként lehet az így feltupírozott forrásból kinyerni ezeket a többletinformációkat anélkül, hogy végig kelljen olvasni a teljes forrást. A View+To-Do list menüpontot kiválasztva egy külön ablakban megjelenik a TODO-k felsorolása, amely bármelyikére rákattintva, a kurzor az adott programpontra kerül, megspórolva nekünk a hosszas keresgélést.
A fentiek alapján készítsük el a saját, személyre szabott sablonunkat!