2. fejezet - A fejlesztőkörnyezetről


Mindig azt mondják nekem, hogy azért nem programoznak C++ -ban, mert nehéz. Na az ilyen embereket kell messziről elkerülni; a C++ nem nehéz, ha a kacsa nem tud úszni, akkor nem a víz a hülye... Blah blah blah miért szar a C# blah. Ne használjatok Java-t se...Java-ban a Hello World! úgy kezdődik, hogy Hello <exception>.

A fenti kis szösszenetet annak a 10 percnek a kitöltésére írtam, amíg lejött a Code::Blocks. Ez egy ingyenes C/C++ fejlesztőkörnyezet, elérhető Windows és Linux alá is. A továbbiakban ezt fogom használni a példaprogramok készítésére. Letölthető a http://www.codeblocks.org/downloads oldalról codeblocks-X.XXmingw-setup.exe néven. Ez abban különbözik a másiktól, hogy a g++ nevű fordítót is tartalmazza, mily meglepő most pont erre van szükség. Egyébként hazudtam, én Visual Studio-t fogok használni, úgyhogy mostantól többes szám második személyben mondom el mit kell csinálnotok.

Telepítés után egy kellemes ablakocska fogad titeket, csináljatok is egy új projektet [File->New Project]. A típusa legyen Console Application. Az elérési utakat értelemszerűen töltsétek ki, a többi fülön nyomhattok csak simán Next-et.

Create project image 1 Create project image 2

Ha mindent jól csináltatok, akkor bal oldalon meg is jelenik a projekt egy fa nézetben, egy előre generált main.cpp forrásfájllal, amiben az előző fejezetben lévö programhoz kísértetiesen hasonlót lehet találni. A következő összefirkált ábra röviden összefoglalja a fontosabb elemeket:
IDE elements

Ha nyomtok egy F9-et, akkor a programot lefordítja, majd el is kezdi futtatni.
Egy kicsit kitérek arra, hogy hogyan is működik a fordítás. Amikor megnyomod ezt a bizonyos F9-et, a fejlesztőkörnyezet meghívja a g++ -t a megfelelő paraméterekkel, valahogy így:

g++ -c -o HelloWorld.o main.cpp
g++ -o HelloWorld.exe HelloWorld.o


Ezt persze lehet tovább cifrázni mindenféle kapcsolókkal, ezeket a [Project->Build options] ablakban lehet állítgatni, majd elmondok néhány lényegtelenebbet. Először viszont nézzük meg történik a fenti két lépésben. Egy átlagos fordítóprogramnál többnyire jól elkülöníthetö ez a két lépés, az elsőben a megadott forrásfájlokat a fordító szintaktikusan ellenőrzi és ha nem talált hibát, akkor minden forrásfájlból generál egy úgynevezett object fájlt, amit tárgykódnak is szokás hívni. Ezekben a hivatkozások nincsenek még feloldva, például az a.o -ban van egy hivatkozás valamilyen változóra ami viszont a b.o -ban van definiálva.

A tényleges futtatható állomány előállítása a következő lépésben történik, amit linkelésnek vagy magyarul szerkesztésnek hívnak, itt történik például a hivatkozások feloldása és az object fájlok egymással és más librarykkal való összeszerkesztése. A linkelésnek két fajtája van, statikus és dinamikus, ezekről itt most nem regélek, röviden annyit róluk, hogy dinamikus linkeléskor egy adott library nem szerkesztődik bele a binárisba, hanem majd futási időben például egy DLL-en keresztül fogja elérni a program.
Az alábbi ábra kicsit pongyolán szemlélteti azt, amiről az előbb írtam.

copmiling
Biztos hallottatok már ilyen állatságokat, hogy ANSI C szabvány vagy ISO C++ szabvány. Általában ha nem windows alá fejlesztesz, akkor szeretnéd ha a program valamennyire szabványos lenne. A fordítónak megmondhatod, hogy ellenőrizze a forráskód szabványosságát. A következő példában ANSI és ISO szabványnak is megfelelően fordítom a kódot:

g++ -c -ansi -pedantic -o HelloWorld.o main.cpp

Ez már jobban hangzik, de lehet még fokozni azzal, hogy minden létező hibáról kérünk visszajelzést, sőt a warning típusú hibákat is errorként kezeltetjük vele:

g++ -c -ansi -pedantic -w -Wall -Werror -o HelloWorld.o main.cpp

Ha így is lefordul a programod, akkor az már nem olyan rossz. Ezeken kívül még egy csomó kapcsoló van, egyet emelnék még ki, a -O3 -at (van -O2 is, ez a kis méretre gyúr rá), amivel a fordító sebességre optimalizálja a kódot.

A fejezet végén megemlíteném még (jobb helyet nem találtam neki), hogyan lehet kommenteket írni a forrásfájlba. A komment nem kerül bele a végleges programba, ezek csak a forráskód olvasójának illetve a fejlesztőnek szóló megjegyzések. Kommentezzük fel a hello világ kódot!

CODE
#include <iostream> using namespace std; // ez itt a program belépési pontja int main() { // kiírjuk, hogy hello világ! cout << "Hello World!\n"; /* ez egy többsoros komment */ system("pause"); return 0; }

Mint látható kétféle mód is van kommentelésre; a többsoros kommentet C-ből örökölte a nyelv, ott csak az van (bár néhány C fordító megeszi a C++ os kommentet is). Az egysoros komment a // jel leírásától a sor végéig tart, a többsoros a /* -tól a */ -ig. Ami fontos, hogy kommenteket nem lehet egymásba skatulyázni, tehát a következő kódra hibát fogunk kapni:

CODE
/* blabla blabla /* blablaaaaablabla blabla */ */ // warning: "/*" within comment // error: expected unqualified-id before '/' token

Itt van példa warning és error típusú hibára is. A warning csak figyelmeztetés, attól még lefordul a program, de azért illik azt is kijavítani. A program outputját, illetve az esetleges hibaüzeneteket mostantól mindig kommentben fogom odaíirni.


Höfö:
  • Cseréld le az alap kódot az első fejezetben látottra és nézd meg mi történik!
  • Hehehe.

back to homepage

Valid HTML 4.01 Transitional Valid CSS!