PDA

View Full Version : #include


x110
30-07-2004, 13:25
ma quando faccio include......cosa succede?
il preprocessore copia il file di intestazione .h sul file .cpp che contiene la direttiva?

a2000
30-07-2004, 13:56
succede che AX dice a BX: "ecco è arrivato un altro pirla !" :D :D

ilsensine
30-07-2004, 13:56
Sì. Un bel copia & incolla.

a2000
30-07-2004, 13:57
... come al solito .... :D

ilsensine
30-07-2004, 13:57
Originariamente inviato da a2000
come al solito .... :D
Finché non brevettano anche questo... ;)

a2000
30-07-2004, 13:59
no, solo il cancelletto. :D

x110
30-07-2004, 16:56
ora che vi siete divertiti me la date una spiegazione un po' approfondita?

x110
30-07-2004, 17:20
tipo:
se io ho 3 classi con il loro file

Myapp.cpp Myapp.h
My1class.cpp My1class.h
My2class.cpp My2class.h

e poi ho anche il prog
main.cpp.

main.cpp necessita di Myapp.h e My2class.h
Myapp.cpp necessita di My1class.h e My2class.h
My1class.cpp necessita di My2class.h

dove vanno gli include? io penso che
in main.cpp ci va
#include <Myapp.h>
#include <My2class.h>

in Myapp.cpp ci va
#include <Myapp.h>
#include <My1class.h>
#include <My2class.h>

e in My1class.cpp ci va
#include <Myclass.h>
#include <My2class.h>

ma cosi' non si sovrappongono le definizioni?

ho un dubbio derivato da una mancanza di teoria.

per cortesia voi magnanimi fornitemi conoscenza.

cionci
30-07-2004, 17:40
Sì...il .h viene copiato dentro...
Per evitare di includere più volte lo stesso file (magari ricorsivamente) si fa in questo modo (metti che il file sotto si chiami pippo.h):

#include "pluto.h"
//tutti gli include necessari

#ifndef ___PIPPO_H
//il nome sopra è puramente di fantasia, ma deve essere diverso per ogni include
#define ___PIPPO_H

/*
corpo del file .h
*/

#endif

x110
30-07-2004, 18:08
ok grazie anch'io ho smanettato un po' con gli #ifndef libro alla mano,
ma ora ho un problema:

una classe necessaria ad altre due classi
ed anche al prog principale.

l'include e' necessario in tutte e due le classi, in modo che sappiano come e' fatta la classe comune giusto?
ma se metto ifndef, il famoso copia e incolla non e' fatto giusto?
e allora non farei prima a non includere direttamente il file della classe comune ?

che so' c'e' qualcosa che non mi torna.

se d'altronde non metto l'ifndef mi da doppia dichiarazione.

mi potresti dare soluzione a quanto scritto nell'esempio precedente?

grazie.

cionci
30-07-2004, 19:01
Usa SEMPRE l'#ifndef...ed includi SEMPRE un .h quando ti serve un qualcosa contenuto al suo interno... In questo modo risolvi qualsiasi problema...

x110
31-07-2004, 11:38
un'altra cosa...
se metto un include che non serve il compilatore incrementa le dimensioni del file finale?
anche se il file e' gia incluso da qualche altra parte?

forse facevo prima a fare l'esperimento da solo:D

cionci
31-07-2004, 19:25
Originariamente inviato da x110
un'altra cosa...
se metto un include che non serve il compilatore incrementa le dimensioni del file finale?
anche se il file e' gia incluso da qualche altra parte?

forse facevo prima a fare l'esperimento da solo:D
Dipende... Se nel file .h ci sono anche le implementazioni sì (anche se non ho verificato)...se ci sono solo le dichiarazioni no...