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)