[C++] les includes et les define fo les mettre ds le .hpp ou le . cpp?

les includes et les define fo les mettre ds le .hpp ou le . cpp? [C++] - Programmation

Marsh Posté le 11-12-2001 à 19:56:52    

moi g toujours tout mis ds les includes et les define ds toto.hpp et ds toto.cpp je mets #include "toto.hpp".
mais est-ce vraiment comme ca qu'il fo faire?

Reply

Marsh Posté le 11-12-2001 à 19:56:52   

Reply

Marsh Posté le 11-12-2001 à 20:10:15    

maitre_mulot a écrit a écrit :

moi g toujours tout mis ds les includes et les define ds toto.hpp et ds toto.cpp je mets #include "toto.hpp".
mais est-ce vraiment comme ca qu'il fo faire?  




Ben oui....
Mais tu fais comme tu veux.....


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-12-2001 à 20:12:29    

ca je me doute, mais qu'est est la "norme" pour les define et les includes?

Reply

Marsh Posté le 11-12-2001 à 20:13:20    

Personnellement quand j'ai un projet dont le nom est toto par exe, dans tous les .cpp je met #include "toto.h"
et dans toto.h je met tous les includes necessaires au bon fonctionnement du prog.
 
Les def de struct aussi dans le h, et les defines ca depend.

Reply

Marsh Posté le 11-12-2001 à 20:15:03    

tout ds un seul .h???
je parle en c++ la.

Reply

Marsh Posté le 11-12-2001 à 20:16:56    

nan pas tout.
mais par exemple pour du C++.
Tu fais une classe NIMP, dans NIMP.cpp j'aurai un #include "nimp.h", et dans NIMP.h j'aurai  
#include <windows.h>
#include <stdlib.h>
 
etc...

Reply

Marsh Posté le 11-12-2001 à 20:21:42    

ouais oki je suis d'accord moi je fais comme toi.
mais si tu as nimp.h et nim.cpp
et toto.cpp et toto.h
et que ds ton toto.h t'as un #include nimp.h,
c po sur que les includes de ton nimp.h soit necessaires a toto.
ceci pour dire que je me demande si ds les .h fo po mettre ce qui est visible par les autres .h, et mettre ds les .cpp uniquement les trucs necessaires a ton .cpp
 
je suis po sur d'etre clair mais bon

Reply

Marsh Posté le 11-12-2001 à 20:27:31    

maitre_mulot a écrit a écrit :

ouais oki je suis d'accord moi je fais comme toi.
mais si tu as nimp.h et nim.cpp
et toto.cpp et toto.h
et que ds ton toto.h t'as un #include nimp.h,
c po sur que les includes de ton nimp.h soit necessaires a toto.
ceci pour dire que je me demande si ds les .h fo po mettre ce qui est visible par les autres .h, et mettre ds les .cpp uniquement les trucs necessaires a ton .cpp
 
je suis po sur d'etre clair mais bon  




Ben en fait je pense que tu peux faire comme tu veux.
Normalement au debut de chaque .h t'as un #ifndef #define, comme ca si tu inclus deux fois le meme .h ca chie pas.

Reply

Marsh Posté le 12-12-2001 à 00:16:19    

maitre_mulot a écrit a écrit :

ouais oki je suis d'accord moi je fais comme toi.
mais si tu as nimp.h et nim.cpp
et toto.cpp et toto.h
et que ds ton toto.h t'as un #include nimp.h,
c po sur que les includes de ton nimp.h soit necessaires a toto.




 
Tu n'as pas besoin de savoir ce qu'inclut nimp.h pour savoir ce qu'il faut inclure ou non dans toto.h.
Si par exemple nimp.h incluait titi.h et que toto.h avait aussi besoin de titi.h il faudrait quand même inclure titi.h dans toto.h pour être "propre". :) Dans le cas contraire, si un jour tu décidais que nimp.h n'incluais plus titi.h, ben alors ton toto.h il ne compile plus. :crazy:
C'est un exemple tout simple mais avec des dizaines de fichiers à gérer mieux vaut "penser" chacun d'entre eux indépendamment car sinon c'est la galère pour trouver les dépendances indirectes. :D
Tu inclus bien des trucs genre stdio.h ou string.h sans savoir s'ils s'incluent entre eux, non? Ben c'est un peu comme ça qu'il faut voir les choses. ;)
 

maitre_mulot a écrit a écrit :

ceci pour dire que je me demande si ds les .h fo po mettre ce qui est visible par les autres .h, et mettre ds les .cpp uniquement les trucs necessaires a ton .cpp




 
Si un .cpp a besoin d'un .hpp que le .hpp de ce .cpp n'a pas besoin, je mets l'include dans ce .cpp. C'est ce que tu pensais faire?
 

maitre_mulot a écrit a écrit :

je suis po sur d'etre clair mais bon  




 
Mouais moi aussi. :lol: :p

 

[edtdd]--Message édité par Krueger--[/edtdd]


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 17-12-2001 à 13:00:51    

<<Si un .cpp a besoin d'un .hpp que le .hpp de ce .cpp n'a pas besoin, je mets l'include dans ce .cpp. C'est ce que tu pensais faire? >>
 
ouais c ca

Reply

Marsh Posté le 17-12-2001 à 13:00:51   

Reply

Marsh Posté le 17-12-2001 à 13:21:18    

tu fais comme tu veux tant que tu peux inclure ton .h autant de fois que tu veux avec:
#ifndef __MON_H__
#define __MON_H__
 
class Mon {
...
}
#endif


---------------
Narf... It is broken...
Reply

Marsh Posté le 17-12-2001 à 14:17:57    

si tu veux etre clean
tu ne mets dans tes .h
que les infos que tu souhaites
partager => interface
et dans .cpp tout ce qui concerne
l'implantation.
 
exemple ton type maclasse est declare avec un membre
qui a besoin d'une declaration externe
 
contenu de maclasse.h:

Code :
  1. #include "declaration1.h"
  2. class maclasse {
  3.   mon_type_externe var;
  4.   ...
  5. };


 
deuxieme solution, tu ne desires pas
inclure cette declaration dans maclasse.h
en fait tu n'en n'as pas besoin si tu
declares var1 comme une reference vers un objet
de type "mon_type_externe".
 
deuxieme implantation de maclasse.h

Code :
  1. // on declare au prealable la classe
  2. // mon_type_externe, ton compilateur s'attend  
  3. // a trouver la definition complete plus tard
  4. class mon_type_externe;
  5. class maclasse {
  6.   mon_type_externe * var;
  7.   ...
  8. };


dans ce cas, des que tu voudras utiliser les  
proprietes et methodes de mon_type_externe
il faudra penser a inclure au prealable "declaration1.h"
 
Si ton souci est la rapidite de compilation
ainsi que l'encapsulation, ne mets dans ton header
que ce qui concerne l'interface et deplace
la partie implantation dans le .cpp
(cela inclut les headers qui ne sont pas
utilises par la definition mais qui sont utiles
au code)
Evidemment il y a des cas ou il faut
faire autrement, notamment quand pour
des raisons d'efficacite, tu veux que les objets
puissent etre entierement locaux et que ses methodes
soient inlines.
(abstraction et performance s'opposent parfois)
 
A+
LEGREG

 

[edtdd]--Message édité par legreg--[/edtdd]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed