Citat:
svaki dio ima svoj heder ali kako kod maina unjeti include
"nekaj.h" a da mi on nadje u nekaj.cpp implementaciju...
Kratak odgovor: nikako.
C i C++ pojma nemaju o deljenju koda. Jedino što se dešava jeste da kada
uključiš neki .h, kompajleru „obećaš“ da će se nekim čudom u krajnjem
kodu naći ta funkcija. Ti sam međutim moraš da obezbediš da se ta
funkcija zaista tamo i nađe.
Primer:
Code:
// Glavni
#include "datoteka.h"
int main (void)
{
zdravo();
return 0;
}
// datoteka.h
void zdravo(void);
// implementacija.cpp
void zdravo(void)
{
// neki kod
}
Programer je odgovoran za povezivanje datoteka u celinu. Dakle moram da
naložim kompajleru da prevede oba modula i da ih zatim prosledi linkeru
na povezivanje u celinu. Pretpostavljam ovde da se koristi GNU C++, ali
priča je manje više ista za sve kompajlere:
g++ -c -o glavni.o glavni.cpp # prevedi glavni.cpp u objektni kod
g++ -c -o implementacija.o implementacija.cpp # prevedi
implementacija.cpp u obj. kod
g++ -o program glavni.o implementacija.o # poveži obe datoteke u program
(YMMV)
Kao što vidiš, ti si sam odgovoran da u program uključiš sve potrebne
datoteke. IDE okruženja često sakrivaju ovaj posao od tvojih očiju i
stvari izgledaju manje-više automatski, ali to je samo privid: kompletno
upravljanje projektom se izvodi nezavisno od samog kompajlera.
Neki drugi jezici imaju ovaj mehanizam integrisan u sam kompajler, ali
kod C-a i derivata to tradicionalno nije slučaj. Ima mnogo alata koji
manje ili više automatizuju održavanje koda, kao što su (tradicionalno)
make i (malo manje tradicionalno) automake, autoconf, libtool. Moguće su
varijacije na temu ali priča je u glavnim crtama ispravna.
f