[ kalkulus @ 28.02.2004. 21:56 ] @

recimo da imam 3 fajla sa kodom, main.cpp, funkcije.cpp i header.h
kod u fajlovima je podeljen na sledeci nacin

---main.cpp
tu se nalazi samo main() funkcija

---funkcije.cpp
ovde se nalaze definicije svih ostalih funkcija

---header.h
ovde imamo prototipe svih funkcija i definicije nekih tipova

ono shto mene zanima je shta gde include-ujemo da bi ovo radilo kako
treba


evo shta sam ja smislio:

u main.cpp imamo
#include "header.h"

a u header.h
#include "funkcije.cpp"


kolega mi je rekao da ovo ne valja, vec da u header.h treba da stavim
#include "main.cpp"
#include "funkcije.cpp"

--
pozdrav
ICQ:27017248
http://kalkulus.go.to
...Ja bi' hteo da se ritam, naredjujem divlji ritam !

[ Časlav Ilić @ 29.02.2004. 09:37 ] @
I ti i kolega ste u pravu pod uslovom da želiš da program prevedeš tako što ćeš kompilatoru zadati samo jednu izvornu datoteku, pri čemu bi uključivanje izvornih (*.cpp) datoteka u zaglavlje išlo na kraju zaglavlja, a uključivanje zaglavlja u izvorne datoteke na početku izvorne datoteke.

Međutim, to se uglavnom nikad tako ne radi. Pravilno je kompilatoru zadati sve izvorne datoteke:

Code:
<kompilator> main.cpp funkcije.cpp [<opcije>]

a zaglavlja uključiti u one izvorne datoteke kojima su potrebna. U tvom slučaju, i datoteka main.cpp i funkcije.cpp bi na početku sadržala liniju:

Code:
#include <header.h>

a header.h bi izgledao ovako:

Code:
#ifndef _HEADER_H_
#define _HEADER_H_
...
... (Sadrzaj zagljavlja)
...
#endif

U pitanju je tzv. „oklopljavanje“ (armouring) zaglavlja, čime se štitiš od mogućnosti da kompilator uključi zaglavlje više od jednom.
[ NastyBoy @ 29.02.2004. 12:57 ] @
#include "nesto.cpp" se nikad ne radi.
To je posao linkera da pronadje gde je implementacija neke funkcije (zato je kompajliranje u C++ mnogo duzhe nego u Delphiu npr.)

Kad inkludujesh header-fajl ti ustvari "obecavash" kompajleru da su funkcije iz tog fajla negde implementirane. U kom .cpp fajlu, to tebe ne treba da brine.
Dobra praksa je da grupishesh deklaracije funkcija/klasa u srodne .h fajlove kako ne bi imao "eksploziju" u cross-referencingu. Implementaciju funkcija iz hedera kasnije mozhesh da shirish u koliko god hocesh .cpp fajlova.
[ kalkulus @ 01.03.2004. 01:21 ] @
Bio jednom "Časlav Ilić" i rekao:

hvala na savetu, sada radi
[ kalkulus @ 01.03.2004. 01:21 ] @
Bio jednom "NastyBoy" i rekao:
Citat:

#include "nesto.cpp" se nikad ne radi.
To je posao linkera da pronadje gde je implementacija neke funkcije
(zato je kompajliranje u C++ mnogo duzhe nego u Delphiu npr.)

Kad inkludujesh header-fajl ti ustvari "obecavash" kompajleru da su
funkcije iz tog fajla negde implementirane. U kom .cpp fajlu, to tebe
ne treba da brine.
Dobra praksa je da grupishesh deklaracije funkcija/klasa u srodne .h
fajlove kako ne bi imao "eksploziju" u cross-referencingu.
Implementaciju funkcija iz hedera kasnije mozhesh da shirish u koliko
god hocesh .cpp fajlova.


10x na svetima
danas samo malo proguglao i nashao sledeci
link
gde je fino objashnjeno nekoliko osnovnih stvari na ovu temu, moze
josh nekome da koristi
[ leka @ 01.03.2004. 10:54 ] @
kalkulus, u principu se to moze i tako raditi. C/C++ programeri imaju
raznorazne "stilove" a to je samo jedan deo necijeg "stila". Neko je vec
rekao da to nije "standardno", ja se sa ovim ne bih slozio. Nailazio sam
na veoma ozbiljne projekte koji rade na slican nacin.
Necu niti volim da uticem na tudji stil, jedino sto mogu da kazem je
kako bih recimo ja to sve odradio:

Ja bih imao <projekat>.h (zameni umesto <projekat> pravi naziv vaseg
projekta - primer: libkalkulus.h) u kome imam deklaracije, tipove i
slicno koji su bitni za ceo projekat. Imao bih takodje funkcije.cpp i
funkcije.h, kao i main.cpp.

Dakle, radno stablo projekta bi izgledalo ovako:
Code:

..
|-- doc
|   `-- README
|-- include
|   |-- funkcije.h
|   `-- kalkulus.h
`-- src
    |-- Makefile
    |-- funkcije.cpp
    `-- main.cpp


U src/Makefile, naravno, prvo sto bih stavio je -I../include :).