Hibák összekapcsolása - a programom
Értékelés: 0/5
Miután összeállította a cpp fájlokat obj fájlokká, a Linker program összeszereli ezeket a fájlokat egyetlen végrehajtható fájlba. Nyilvánvaló, hogy az összeállítás első szakaszában (a cpp fájlok összeszerelése obj fájlokban), a második pedig hibák lehetnek. Az első szakaszban meg kell értenünk a tipikus hibákat. Tekintsük a kapcsolási fázis hibáit. Kiderül, hogy sokan vannak, és csak néhány tipikus hibát veszünk figyelembe.
1. A változók és a függvények definiálása a fejlécfájlok között.
Képzeljük el, hogy van a main.cpp fájl:
A fájlban van néhány megvalósítás, de most nem fontos számunkra. Tekintsük a lib.h fájlt
Szörnyű hibát követett el: egy változót és egy függvényt definiáltunk benne. Mi fog történni ennek következtében? Lássuk. A fordítás során a #include "lib.h" helyett a fájl tartalmát is beillesztjük. Könnyen használhatjuk az i változót és az f függvényt a main.cpp fájlban. Ha mindezt a lib.cpp fájl nélkül használhatjuk, akkor miért van szükségünk a lib.h fájlra? A megtérülés akkor fog megtörténni, amikor egy második cpp fájlt akarunk létrehozni a projektünkben. Adjuk meg a másik.cpp nevet
Ez az első klasszikus hiba, amikor a fejlécfájlokkal dolgozik.
Következtetés: a fejlécfájlokban csak a függvényfejlécek és a külsőleg definiált külső hivatkozások
2. Bejelentették, de elfelejtették azonosítani.
Tegyük fel, hogy van egy file main.cpp
A lib.h fájlban leírtuk az f függvény fejlécét, és a lib.cpp fájlban bármit megteszünk, de nem írjuk le a f függvény végrehajtását. Mi fog történni? A fordító összeállítja a main.cpp parancsot. A #include helyett a "lib.h" beilleszti a lib.h fájlt. Látja, hogy az f függvényt korábban deklarálták és csendben összeállította a fájlt a main.obj könyvtárba. Ezután összeállítja a lib.cpp fájlt és megkapja a lib.obj fájlt. Ezután a linker vagy a linker megpróbálja elkészíteni a futtatható fájlt e két fájlból. Ebben a folyamatban megoldja az összes külső hivatkozást a fájlok között. Ebben az esetben megpróbálja megoldani az összefüggést az f függvény és a tartalom között. De végrehajtása nem. Ezért hamis hibát ad vissza: az f függvény nincs meghatározva. Ez egy nagyon furcsa hiba. Minden modern fordító azonnal megoldja ezt a hibát.
3. Bejelentett, de másként definiált.
Hagyjuk, hogy a fájlok main.cpp:
A main.cpp fájl problémamentesen áll össze, mivel a lib.h fájl azt mondja, hogy az f függvény, amely egy egész paramétert vesz fel és egész számot ad ki, valahol meghatározásra kerül. A fordító el fogja hinni ezt, és összeállítja a fájlt. Ezenkívül f függvényt definiálunk egy másik cpp fájlban, csak elfelejtjük a típusát, amelyet elfogad. Lényegében egy másik függvényt definiáltunk. Ezt is összeállították. Ezután a linker elkezd dolgozni. Az egész függvényt elfogadó f függvény leírása megkezdi a keresést más obj fájlokban vagy ugyanabban a fájlban. Ezt megtalálja, de másfajta elfogadott jelentéssel bír. Ha nem talál egy másik f függvényt, akkor egy linkhiba keletkezik: az f függvényt másképpen definiáljuk.
Más nyelven más furcsa hibákat nem találsz.
Most nézzük meg ezt a többletet a következő leckében.
- Ön itt van:
- legfontosabb
- Programozási képzés
- C ++
- Hivatkozások hibája (elrendezés)