Elkülönített összeállítás c

Ezért egyetlen forráskód nem tudja meghatározni, hogy mely fájlok szükségesek a függőség kielégítésére. Szükség van külön, kézzel, meg kell adni a linkert. Emiatt megjelentek az összeszerelő rendszerek - figyelnek a fájlok frissítésére, a frissített formátumok újrafordításáról és a hivatkozó linkeléséről. Később az IDE megjelenésével szükségessé vált a fájlok kölcsönhatásaival kapcsolatos információk tárolása - így a projektek megjelentek. Valójában csak a forrást tartalmazó fájlok listája, amelyeket össze kell fordítani és linkelni, valamint információkat a fordító / linker / IDE beállításairól.

A külső karaktert a külső kifejezés zárja le. Pontosabban elmondja a fordítónak, hogy nem szükséges ezen szimbólum végrehajtását (vagy helyet adni, ha változó). A függvények alapértelmezés szerint külsőek, ezért nem kell megadnia külső számukat.

A következő szórakoztató dolog több szimbólum megvalósítás. Mivel a karakter határozza csak a saját nevében (ellentétben a moduláris nyelv, ami azt jelzi, nem csak a karakter, hanem hol kapni) - ha az összekötő találkozik több hasonló karakter, végre különböző fájlokat, akkor nem tudja meghatározni, hogy ezek közül melyik kerül elküldésre a fordító és hibát okoz. Innen dán táncok jelentek meg, amelyek a C névsávok - előtagok egyediségét biztosítják, a C + + névtereket.

De a különböző fájlok szimbólumnevének véletlenszerű egybeesése mellett van egy másik oka ennek a hibának - a szimbólumnak a fejlécfájlban történő végrehajtásához. Ha egy változót vagy egy függvényt deklarál (teljesen, nem csak annak címe), akkor minden olyan fájlba bele fog kerülni, ahol ez a fejlécfájl szerepel, és mivel van megvalósítás, akkor mindenki végrehajtja őket. Nos, és tovább, miután felfedezte az azonos nevű szimbólumok implementációját, a linker hibát ad. Ezért a header file kerül csak extern változók és fejlécek funkciók (kivéve inline függvények - hívja őket, hogy helyet helyettesíti a fordító is, és ezért kell a végrehajtás fordításkor). Még több móka, ha kijelentik (statikus - globális, hanem csak egy látható a fájl, ahol deklaráltan) változó zagolovochnike - minden összeállítja hiba nélkül, de minden obektnike lesz saját példányát a változó nem kapcsolódik a többi, bár hallgatólagosan egy globális változót . Ennek eredményeképpen felmerül a kérdés: "Miért, ha betöltem a textúrákat a main.cpp-ban, minden működik, de ha más.cpp-ben van, akkor a textúrák nem töltődnek be?".

Itt. Valami ilyesmi. Érdemes megjegyezni, hogy a C ++-ban ez a mechanizmus bonyolult és másképpen működik, de ezekkel a különbségekkel nem vagyok elég. De az első megközelítésben hasonlóan működik.

Ui Vártam a neiver'a és más C :) szórakoztató paradicsomokat :)

Igen, semmi ilyesmi.
Példák nem elegendőek)

általában kívánatos folytatni a láthatóság területeit és mindazt, ami következik ...
és természetesen példákat kell mutatnia

A C nyelv tömörsége számos operátorral együtt lehetővé teszi programkód létrehozását, amelynek megértése rendkívül nehéz. Senki sem arra kényszeríti a programozót, hogy világos programokat hozzon létre, de ennek minden lehetősége elérhető.
;)

alatt a # leginkább árnyalt összeállítás. és általában azok számára, akik C-ről akarnak tanulni mindentől, amit itt tárgyalnak, menjenek a könyvbe: C programozási nyelv, Kernighan, Ritchie. IMHO jobb elkezdeni nem találni.

Ez az? Amennyire tudom éles, ebből az anachronizmusból elutasították és valami olyasmit használtak, mint egy moduláris összeállítás. Úgy tűnik, hogy még nincs header, connect .cs modulok vagy whole .dll assemblies. Végül is, nem is annyira Perl, mint a Java és a Dolphi.

És az a tény, hogy a program ezt a könyvtárat használja, meg kell adnia a linkert külön ... a linkernek meg kell adnia az objektumfájlt? így a másik kérdés - a fájl és a fejléc fájl azonos neve van?

A jó formák szabályai - igen, általában nem feltétlenül.

... És egy másik kérdés: ha a fájlok ugyanabban a mappában vannak, mint a projektnek, még mindig meg kell adniuk a linkert?

Igen. Ő maga nem keresi őket. A megadott fájlokat összeköti. Ha csak a név van megadva, a keresési könyvtárakban keres. Az objektumfájlok archív könyvtárban is megtalálhatók. Ezután meg kell adnia a linkert, mint könyvtárat - a gcc esetében ez az -l gl.a. A könyvtárból megtudja, hogy mely fájlok tartalmazzák (nagyjából - mindent, de az "intelligens link" ki fogja dobni azokat a szimbólumokat, amelyeknek nincsenek linkjei).

Természetesen szükség van rá. A linker nem tud semmit a projektjeiről, csak a kifejezetten elmondta, és egy szabványos könyvtárat.

Egyébként magának a projektnek az a célja, hogy tárolja az objektumok listáját és átadja azokat a linkernek. Minden, a projektben szereplő fájl (jóllehet, a kiterjesztésekkel szűrtek, ezért a projekt összes .c és .cpp fájlját rendben rendezzük, majd továbbítsuk a linkre.
By the way, a szerelő pontosan ugyanazt a rendszert. Ezért elég könnyű kombinálni a C / C ++ programmal - csak olvassa el, hogy a fordító hogyan hajtja végre a magas szintű dolgokat, például a paraméterek átmásolását egy funkcióra. Hacsak a kívülről látható szimbólumokat nem szabad kifejezni a GLOBAL direktíva szerint (és ez az adott szerelőtől függ). A külső karakterek ugyanazok a EXTERN.

... vagyis egy szóval - a funkciók, változók stb. összes nem súlyozott nevének helyettesítésével. mein részt vesz a előfeldolgozó, ami viszont fumbles csak azokat a fájlokat, amelyek leírásuk szerint a kapcsoló, csak zborki, mein transliretsya funkció szerelő majd Campiglio?
.c -> .o -> .asm -> .hex vagy .exe - helyeseltem?

Kapcsolódó cikkek