Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3321 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Comment ca marche les include...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment ca marche les include...

n°358797
gooopil
pfiew
Posté le 11-04-2003 à 14:28:09  profilanswer
 

Ben voila, c'est tout con, je sais plus comment il faut faire mes include dans des classes.  
 
Au départ, j'étais parti en mettant les include dans les fichiers .cpp et ca marchait à peu près. (Sauf des fois ou apparemment je devais mettre également l'include dans le .h pour que ca marche...)  
La j'en suis à un point ou j'ai des inclusions croisées :
inclusion d'une classe view dans une classe document
et dans cette classe view, inclusion du document...Et la je suis tout perdu, ca marche plus au niveau des includes...
 
Alors comment c'est y qui faut que je fasses ?  
 
Si vous avez besoin de plus d'info, je mettrais mon code, demandez si besoin :) Merci
 
PS : J'ai fait un iut info il y a quelques temps, alors n'hésitez pas à vous moquer ;)

mood
Publicité
Posté le 11-04-2003 à 14:28:09  profilanswer
 

n°358802
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-04-2003 à 14:30:07  profilanswer
 

Pour éviter les inclusions croisées, mettre ceci dans le .h:
 
#ifndef MON_FICHIER_H
#define MON_FICHIER_H
 
(...)
 
#endif


---------------
J'ai un string dans l'array (Paris Hilton)
n°358808
Taz
bisounours-codeur
Posté le 11-04-2003 à 14:31:13  profilanswer
 

dans chaque .h
 
 

Code :
  1. #ifndef motif_decoratif_nomfichier_h
  2. #define motif_decoratif_nomfichier_h
  3. // tes definitions
  4. #endif

ca evite que le préprocessuer passe 2 fois
motif_decoratif, ca peut etre ton nom, la date, le nom du projet ou une combinaison. plus cet identifiant est unique, mieux c'est

n°359093
gooopil
pfiew
Posté le 11-04-2003 à 17:10:43  profilanswer
 

Ok merci, j'avais oublié ca. Et en fait, je les met ou tous mes include : dans le .h ??

n°359097
Taz
bisounours-codeur
Posté le 11-04-2003 à 17:12:54  profilanswer
 

:heink:

n°359101
gooopil
pfiew
Posté le 11-04-2003 à 17:15:31  profilanswer
 


Ben oui je sais pas....

n°359102
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-04-2003 à 17:15:44  profilanswer
 

Plait il Odile ? :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
n°359103
gooopil
pfiew
Posté le 11-04-2003 à 17:17:01  profilanswer
 

Elle est pas clair ma question ?

n°359105
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-04-2003 à 17:18:24  profilanswer
 

Non


---------------
J'ai un string dans l'array (Paris Hilton)
n°359113
Taz
bisounours-codeur
Posté le 11-04-2003 à 17:21:17  profilanswer
 

tu dois mettre tes include uniquement là ou il y en a besoin.

mood
Publicité
Posté le 11-04-2003 à 17:21:17  profilanswer
 

n°359117
gooopil
pfiew
Posté le 11-04-2003 à 17:22:16  profilanswer
 

Zut ! Désolé
Alors je repose :  
Si dans une de mes classes j'ai besoin d'inclure machin, le include "machin.h", je le met dans le .cpp ou dans le .h ou dans les deux ?
J'espère que ca sera mieux cette fois ;)

n°359123
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-04-2003 à 17:26:52  profilanswer
 

Ca dépend
Si tu fais référence à telle ou telle classe dans un fichier cpp, alors tu l'inclus dans ton fichier cpp.
 
A partir du moment ou dans un fichier tu fais référence à une classe déclarée ailleurs, tu dois inclure le .h correspondant, quel que soit le fichier ou tu te trouves


---------------
J'ai un string dans l'array (Paris Hilton)
n°359125
gooopil
pfiew
Posté le 11-04-2003 à 17:27:36  profilanswer
 

Oki merci Harko et désolé pour le dérangement

n°359127
Taz
bisounours-codeur
Posté le 11-04-2003 à 17:28:43  profilanswer
 

c'est à dire que si tes prototypes de ton .h n'ont pas besoin de "truc.h" mais que l'implementation a elle besoin de truc.h, il ne faut mettre l'include de "truc.h" que dans le .cpp et pas dans le .h

n°359149
gooopil
pfiew
Posté le 11-04-2003 à 17:33:14  profilanswer
 

C'est ce que j'avais déduit :) Et en fait, le problème ne venait pas du manque de #ifnef(...) puisque VC++ me les avaient mis automatiquement...Va donc falloir que je me plonge dans mes include pour faire du rangement....
 
Merci les gars

n°359447
vince_223
Posté le 12-04-2003 à 09:39:17  profilanswer
 

Bizarre, on m'a toujours appris a faire le contraire..
 
Moi je met tous mes includes dans le .h
 
De toute facon ca change pas grand chose, du moment que dans ton implementation , tu fasse un include de ton fichier d'entete.

n°359448
Taz
bisounours-codeur
Posté le 12-04-2003 à 09:45:09  profilanswer
 

ça change énormément. si tu fais un include alors qu'il n'y en a pas besoin, c'est autant de travail supplémentaire pour le préprocesseur. et si le volume est important, template par exemple, ça fait exploser les temps de compilation pour rien(sérieusement, avec ce genre de truc, c'as pas rare de voir le préprocesseur qui crache un fichier de 1Mo, avec seulement 150Ko utile). et puis c'est aussi le principe de modularité: les include font partie de ton implémentation, ton utilisateur n'a pas besoin/ne doit pas disposer de la liste complète de toutes les bibliotheques que tu utilises ni des éventuels liens entre tes différents modules.

n°359451
theshockwa​ve
I work at a firm named Koslow
Posté le 12-04-2003 à 10:03:53  profilanswer
 

Et dans certains cas, on ne peut même pas se permettre de mettre l'include dans le .h (pour résodre des pbs d'includes circulaires ...)


---------------
last.fm
n°359453
Taz
bisounours-codeur
Posté le 12-04-2003 à 10:07:34  profilanswer
 

theShOcKwAvE a écrit :

Et dans certains cas, on ne peut même pas se permettre de mettre l'include dans le .h (pour résodre des pbs d'includes circulaires ...)

:heink: relis le topic

n°359500
vince_223
Posté le 12-04-2003 à 13:57:11  profilanswer
 

++Taz je suis bien d'accord avec toi, c debile d'inclure des trucs qui servent pas, mais moi quand je prog, mon implementation n'a qu'un seul include : celui du .h
les autres sont dans le .h
 
C'est aussi une question de clarté, histoire de pas se retrouver avec des includes partout n'importe comment

n°359502
schnapsman​n
Zaford Beeblefect
Posté le 12-04-2003 à 14:06:08  profilanswer
 

vince_223 a écrit :

++Taz je suis bien d'accord avec toi, c debile d'inclure des trucs qui servent pas, mais moi quand je prog, mon implementation n'a qu'un seul include : celui du .h
les autres sont dans le .h
 
C'est aussi une question de clarté, histoire de pas se retrouver avec des includes partout n'importe comment


 
pipo pipo pipo  :sarcastic:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°359509
crycry
Posté le 12-04-2003 à 14:42:13  profilanswer
 

Lorsqu'une donnée membre, un paramètre ou un retour de fonction est de type pointeur, le #include n'est pas nécessaire, de même pour les arguments ou les retours passés par valeur dans un header.
Dans le fichier .cpp, le 1er #include doit être celui qui correspond à l'implémentation.

Code :
  1. /*Header*/
  2. #ifndef X_H
  3. #define X_H
  4. class Y;
  5. class Point;
  6. class X
  7. {
  8.   private :
  9.     Y* pY;
  10.  
  11.   public :
  12.     X();
  13.     virtual ~X();
  14.     Point GetPoint();
  15.     void SetPoint(Point p);
  16.  
  17. };
  18. #endif


 
Si on met '#include "Y.h"', on provoque un copier-coller de ce fichier à chaque lecture du fichier X.h , ce qui peut vite être coûteux...

n°359525
Taz
bisounours-codeur
Posté le 12-04-2003 à 16:31:19  profilanswer
 

ce que je disais précédemment

n°359537
vince_223
Posté le 12-04-2003 à 17:17:52  profilanswer
 

ok
 
C vrai qu'en faisant cela, ca fait une copie
Autant pour moi... j'aurai apris quelque chose.
 
justement si y'a quelqu'un qui veut bien m'expliquer le fonctionnement des includes avec le preprocesseur plus en detail, je suis carrement preneur, car apparament, j'ai des lacunes dans ce domaine. (ou un cours la dessus)

n°359540
Taz
bisounours-codeur
Posté le 12-04-2003 à 17:31:20  profilanswer
 

gcc -E

n°359577
theshockwa​ve
I work at a firm named Koslow
Posté le 12-04-2003 à 19:05:18  profilanswer
 

++Taz a écrit :

:heink: relis le topic


 
désolé ... Effectivement, j'ai lu en travers ... :jap:


---------------
last.fm
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Comment ca marche les include...

 

Sujets relatifs
probleme de fichier includefflush(stdin) ne marche pas
[PHP] HELP je pete un cable ! select marche + ?[PHP] Petite question sur 'include'
Formater un texte en php ? RESOLU ca marche avec le \n[PHP] include qui marche pas ?
PHP + SNMP quelqu'un a deja testé? --> ca marche!POURQUOI INCLUDE( ) AVEC UNE URL SA MARCHE PAS ??
[PHP] comment ça marche "include" ?[php3-Free] problème d'include qui marche mal
Plus de sujets relatifs à : Comment ca marche les include...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR