Hirdetés
- Projektor topic
- Máris elfogytak az idei évre szánt HDD-k a Western Digitalnál
- Milyen billentyűzetet vegyek?
- RAM topik
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- HiFi műszaki szemmel - sztereó hangrendszerek
- Idővel kicsúszik az aljzatból a 12V-2x6 tápkonnektor?
- Kormányok / autós szimulátorok topikja
- Vezeték nélküli fülhallgatók
- Fejhallgató erősítő és DAC topik
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
#90088192
#6053
üzenetére
Alapvetően azzal kell tisztában lenni, hogy az #include-okkal beszúrt fájlok az őket beinklúdoló fájlokkal együtt egy fordítási egységet (translation unit TU) képeznek. Az #include egy direktíva, a C előfordítónak szól, és egyszerűen szöveg-szinten beszúrja az inklúdolt fájlt. Tehát olyam, mintha copy-pastéval bemásolnád a fájlt. Ezért az inklúdokban nem lehet körbe hivatkozás (a.h inklúdolja b.h-t, ami inklúdolja a.h-t), és nem lehet többször inklúdolni ugyanazt a fájlt (mert ekkor keletkezik a többszörös defínició). Az utóbbi elkerülésére az ún. include guard megoldást használjuk:
Pl. egy include file így néz ki:#ifndef __include_guard_h //itt a nev include fájlonként különböző és a fáj nevére utal
#define __include_guard_h
//ide jön az include file tartalma
#endif
Ezzel azt érjük el, hogy egy TU-ban ne lehessen az include fájlt többször beszúrni. Ugyanis először az __include_guard_h makró még nincs definiálva, tehát a fájl tartalma feldolgozásra kerül, miközben a makró definiálttá válik. Következő eseleges beszúráskor a makró már definiálva lesz, de a #ifndef direktíva hamosra lesz kiértékelve, vagyis a feldolgozás az #endif után folytatódik. A körbe hivatkozások ellen az include guard nem véd, arra neked kell odafigyelni.
C forrás fájlokat tényleg nem szoktunk inklúdolni. Ha több forrás fájlból áll a projected, akkor azokat a project létrehozásakor (project fájlban) kell megadni. Ezek külön-külön fordítási egységet fognak képezni (az általuk beinklúdolt header fájlokkal együtt), amikben már újra inklúdolhatod a másik TU-ban beinklúdolt header fájlt. A külön fordítási egységekben definiált függvények és globális változók egymás közötti elérhetőségét a linkelés (linker) fogja biztosítani.
Esetenként előfordul (pl. template-ek használatakor), hogy header fájlban függvény definícót írnak, amik a különböző TU-kba való inklúdolások után a linker számára valóban többszörös defínicók lesznek, de ezt a legtöbb linker kezeli. Ettől még kerülendő ez a gyakorlat, ha nagyon kell akkor inline-ként megadható, bár azt a fordító dönti el, hogy valóban inline módon fordítja-e.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- AKCIÓ! Intel Core i9 10900 10mag 20szál processzor garanciával hibátlan működéssel
- PS Portal , garanciás , üvegfólia + ajándék Venom tok
- GYÁRTÓI GARIS/ÚJ Ryzen 7 9700X/32 GB DDR5 6000 MHZ/ASUS B850 TUF/RX 9070 XT 16 GB/ 2 TB M.2 SSD
- iPhone 16 Pro 256GB Voda/One hibátlan 2026.05.04. Apple jótállás
- Bontás illetve lakás kiürítése !!!!
- 152 - Lenovo LOQ (15IRH8) - Intel Core i5-12450H, RTX 4060 (ELKELT)
- iPhone 11 Pro Max 64GB Midnight Green -1 ÉV GARANCIA - Kártyafüggetlen, MS4377
- Dell Latitude 3420 - i5 1135G7 ,16GB RAM, SSD, jó akku, EU bill., számla, 6 hó gar
- BESZÁMÍTÁS! ASUS ROG B760 i9 14900K 32GB DDR5 1TB SSD Asus ROG RTX 3090 24GB Zalman Z1 1000W
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

