előadás 02
Bár nem akarja figyelmen kívül hagyni őket, fordító figyelmeztetések nem valami komoly ahhoz, hogy ne fordítsa le a programot. Jellemző, hogy a fordítási figyelmeztetés - ez annak a jele, hogy valami elromolhat, futás közben. A fordító nem tud róla? Meg kell végzett a tipikus hibákat, hogy a fordító tudja. Egy tipikus példa - használata az értékadó operátor = helyett egyenlőség operátor == belsejében egy kifejezést. A fordítóprogram is figyelmeztet a változók használata, amelyek nem inicializált, és más hasonló hibákat. Általános szabály, hogy akkor meg a szintet a fordító figyelmeztetések - én meg azt, hogy a legmagasabb szinten, így nem alakulnak egy hiba a jelenlegi program ( „futásidejű hibák”) fordító figyelmeztetéseket.
Azonban a fordító figyelmeztetések ne álljon le a programot (ha nem adja meg a fordító kezelésére figyelmeztetésekre hiba), így azok valószínűleg nem olyan súlyos, mint egy hiba.
Hibák - ezek a feltételek, amelyek megakadályozzák a befejezése összeállítása a fájlokat.
fordítóprogram hibát korlátozza egyes Forráskódfájlok az eredménye a „szintaktikai hiba”. Valójában ez azt jelenti, hogy tettél valamit, hogy a fordító nem tudja megérteni. Például a kifejezést (;) szintaxis nem helyes, mert a ciklus mindig három részből áll. Míg a fordító elvárja pontosvessző, ez is várható feltételes kifejezés, így a hiba, akkor egy üzenet lehetne valami hasonló:
13 vezeték, nem várt zárójel „)”
Megjegyezzük, hogy a fordító hibát mindig magukban foglalják a sor számát, ahol a hibát észlelte.
Még ha telt el a fordítási folyamatot sikeres, akkor lehet, hogy probléma van az elrendezést. Linker hibák, szemben lefordítani hibák semmi köze a rossz szintaxis. Ehelyett a linker hibát - ez általában egy probléma a keresést a függvények definiálása, szerkezetek, osztályok, vagy a globális változók volna nyilvánítani, de nem határozza meg a forrás fájlban. Általában ezek a hibák lesznek:
Nem találtunk definíciót X
Általános szabály, hogy a fordítási folyamat kezdődik egy sor fordítási hibák és a figyelmeztetések, és rögzítse őket, akkor a találkozás egy kapcsoló hiba. Viszont én először fordításkor hibákat korrigálni, majd a linker hibát.
fordítóprogram hibát -, hol kezdjem?
Ha szembe listáját ötven vagy hatvan hibák és figyelmeztetések, akkor nehéz meghatározni, hogy hol kezdjem. A legjobb hely, azonban a lista elején. Sőt, akkor szinte soha nem kezdenek kijavítani a hibákat a fájl végére, mielőtt elkezd egy egyszerű oka van: nem tudja a hibákat ők valójában!
vezethet egy hatalmas hibák számát, beleértve hozzászólások:
idegen „int” figyelmen kívül hagyta
Mindez azért, mert az egyik karakter! A legjobb, hogy indítsa el a felső.
Elemzés a hibaüzenet
A legtöbb üzenetet a fordító állnia legalább négy dolgot:
az üzenet típusa - figyelmeztetés vagy hiba;
forrás fájlt, amelyben a hiba történt;
egy rövid leírást, hogy mi nem működik megfelelően.
Következtetés g ++ programozni a fenti így nézhet ki (az eredmények változhatnak, ha egy másik fordító):
foo.cc:7: error: pontosvessző után hiányzik struct nyilatkozat
foo.cc a fájl nevét. 7 - sorszám, és nyilvánvaló, hogy ez egy tévedés. Rövid üzenet itt nagyon hasznos, mert megmutatja, hogy pontosan mi a baj. Megjegyzendő azonban, hogy az üzenet értelme csak a műsor keretében. Nem mondja el, amit a szerkezet hiányzik egy vessző.
További zavaró egy másik hibaüzenet ugyanazon kísérlet összeállítása:
idegen „int” figyelmen kívül hagyta
A programozó kell kitalálni, hogy miért történt. Felhívjuk figyelmét újra, hogy ez a hiba okozta a probléma elején a program nem felel meg a 8. és a korábban, amikor nincs pontosvessző a szerkezetben. Szerencsére, egyértelmű, hogy a függvény definíciójában az ize volt ahhoz, hogy azt mondja, hogy a hiba pedig valahol máshol a programban. Sőt, azt kell a programot, mielőtt - akkor nem kap hibaüzenetet, hogy szintaktikai hibát jelez, hogy a vonal, ahol a hiba történt valójában.
Ez a vezérelve számításakor a fordító hibát: ha kétségei vannak, nézze meg a programot, mielőtt. Mivel szintaktikai hibák súlyos következményekkel járhat később, akkor lehetséges, hogy a fordító rámutatott a sor számát, ami valójában nem volt szintaktikai hiba!
Nem lenne sokkal rosszabb, ha a fordító nem fogja megmondani, hogy mi történt korábban a programban. Még az első fordító hibát, hogy megkapja oka lehet, hogy egy pár sort a megadott figyelmeztetést.
Feldolgozás homályos vagy szokatlan üzeneteket
Vannak különösen nehéz típusú fordító hibákat. Első - ez egy be nem jelentett változó, amely, mint amilyennek látszik, te bejelentették. Gyakran előfordul, hogy megadhatja, ahol a változó nyilvánították! A probléma az, hogy egyes változók csak elgépelt. Sajnos, ez elég nehéz látni, mert általában azt olvassuk, amit várunk, nem pedig arról, hogy valójában van. Ezen kívül vannak más okok is lehet a probléma - például problémák láthatóság!
Egy második érthetetlen üzenet:
Váratlan fájl vége
Végül, ha az üzenet nem világos, a megközelítés a problémát a gondolkodás, a fordító megpróbálja értelmezni a fájlt. Ez nehéz lehet, ha csak most kezdik el, de ha figyel az üzenetet, és próbálja megérteni, mit is jelenthet akkor hamar megszokja az általános törvények.
Végül, ha minden kötél szakad, akkor mindig csak újra írjon egy pár sornyi kódot, hogy távolítsa el a rejtett szintaktikai hiba, amit nem lehetett látni. Ez veszélyes lehet, mert nem lehet átírni, hogy részben, de ez segíthet.
Miután rögzítették az összes szintaktikai hibát, nap, snack párszor, és mentálisan felkészülhet a helyes összeállítása a program, akkor is problémákba ütközik az elrendezést. Gyakran elég nehéz korrigálni, mert nem feltétlenül az eredmény, mi van írva a program. Röviden leírja a tipikus fajta kapcsoló hiba, hogy lehet számítani, és bizonyos szempontból az a megoldás.
Problémát okozhat, a miként állítja be a fordító. Például akkor is, ha tartalmazza a szükséges header fájlokat az összes funkciót, akkor is meg kell adni a linker a helyes utat, hogy a könyvtár, amely a tényleges megvalósítás. Ellenkező esetben, akkor kap egy hibaüzenet jelenik meg:
Néha vannak kisebb hibák, ha az összekötő jelentések több meghatározást egy függvény, vagy változó. Ez a probléma több okból: először is, az objektum lehet két meghatározása - például két globális változót deklaráljuk a külső változók, hogy hozzáférhetők kívül a forrás fájlt. Ez vonatkozik mind a funkciókat és változókat, és ez, sőt, gyakran előfordul. Másrészt, néha ez a probléma az irányelveknek a linker; Többször láttam az emberek között több példányban ugyanazt a tárgyat fájlt a kötési eljárás. És bingó, van néhány meghatározást. Egy tipikus megnyilvánulása ez a probléma az, hogy számos funkciót van néhány definíciók.
Utolsó furcsa típusú kapcsoló hiba - üzenetet
undefined reference to main
Éppen ellenkezőleg, az azt jelenti, hogy az építtető próbált létrehozni egy futtatható fájlt, és nem értette, ahol a funkció main (). Ez akkor fordulhat elő, ha elfelejtett megadni egy alapvető funkciója, vagy ha megpróbálja lefordítani kódot, hogy még soha nem volt egy futtatható fájl (például, ha megpróbálta összeállítani egy könyvtárban).
A választás a fordító (IDE)
dows: Code :: Blocks a mingw Code :: Blocks is elérhető Linux
A Microsoft Visual C ++
g ++ egy C ++ fordító, amely a legtöbb Linux disztribúció * NIX
Apple XCode. XCode - IDE programozás OS X vagy iPhone.
Qt SDK - cross-platform szoftvercsomag fejlesztése.