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>.
![]() ![]() 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: ![]() 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. ![]() 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ö:
|