OVH Cloud OVH Cloud

[debutant] directive include

16 réponses
Avatar
Bruno CAUSSE
Bonjour,

Est il correcte de placer les directives #include après les "ifndef" dans
les fichiers d'entete?

Existe t'il une convention d'écriture de code?

Supplement :-) : Pourquoi puis je utiliser std::string sans directive
#include<string> (compilo gcc)?

6 réponses

1 2
Avatar
Michel Michaud
Dans le message BEB7BDD4.4156%,
dans l'article d6sqk8$jrp$, Marc Boyer à
a écrit le 23/05/05 16:50 :

Non, non:


Bon deuxieme essai :-)


Et je réponds avec des exemples, puisque mon message, qui me
semblait clair, ne l'était apparamment pas :-)

Dans hpp tout les includes necessaires au hpp. (apres #ifndef)


Oui. Comme je l'ai dit, ceci doit pouvoir compiler :

// Test.cpp
#include "fichier.hpp"
// C'est tout

Alors s'il y a des éléments dans fichier.hpp qui demandent des
#include, par exemple des std::string qui demandent #include <string>,
il faut les mettre dans fichier.hpp (après #ifndef mais c'est un
détail qui n'a rien à voir avec la discussion ici).

Dans cpp tout les includes necessaires au cpp sauf ceux du hpp
correspondant.


Je ne suis pas sûr que tu as compris, car je ne comprends pas ton
« sauf ceux du hpp correspondant ». Alors un exemple :

// Essai.cpp
#include ...
#include <string> // Inclus parce que std::string est utilisé
#include ... // dans le code plus loin, même si on pense
// ou qu'on sait que <string> est inclus par
#include "fichier.hpp" // un des autres #include, y compris le tien

std::string var; // C'est à cause de cette ligne qu'on voudra le
// #include associé, explicitement, même si on
// l'a aussi dans fichier.hpp

Par ailleurs, les #include doivent aussi pouvoir être inclus dans
n'importe quel ordre et plusieurs fois. Contrairement à l'habitude,
ça peut donc être une bonne idée d'inclure d'abord les fichiers
personnels avant les #include standard.

Bon, j'espère que c'est clair maintenant :-)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
Bruno CAUSSE
dans l'article y1nke.2336$, Michel Michaud à
a écrit le 23/05/05 17:55 :

Je ne suis pas sûr que tu as compris, car je ne comprends pas ton
« sauf ceux du hpp correspondant ». Alors un exemple :

// Essai.cpp
#include ...
#include <string> // Inclus parce que std::string est utilisé
#include ... // dans le code plus loin, même si on pense
// ou qu'on sait que <string> est inclus par
#include "fichier.hpp" // un des autres #include, y compris le tien

std::string var; // C'est à cause de cette ligne qu'on voudra le
// #include associé, explicitement, même si on
// l'a aussi dans fichier.hpp

Par ailleurs, les #include doivent aussi pouvoir être inclus dans
n'importe quel ordre et plusieurs fois. Contrairement à l'habitude,
ça peut donc être une bonne idée d'inclure d'abord les fichiers
personnels avant les #include standard.

Bon, j'espère que c'est clair maintenant :-)


C'est clair, (parce que non contracdictoire avec les autres contributeurs)
mais je voie qu'il n'y a aucune standardisation. Chacun sa maniere... :-(

Avatar
Bruno CAUSSE
dans l'article BEB7CE68.4167%, Bruno CAUSSE à
a écrit le 23/05/05 18:16 :

Chacun sa maniere... :-(


Abondance de biens ne nuit pas.

Avatar
Michel Michaud
Dans le message BEB7CE68.4167%,
C'est clair, (parce que non contracdictoire avec les autres
contributeurs) mais je voie qu'il n'y a aucune standardisation.
Chacun sa maniere... :-(


Où vois-tu ça ? J'ai dit et je continue à prétendre que c'est ce que
font naturellement la plupart des programmeurs C++ et c'est aussi ce
qui est recommandé par les livres qui font de telles recommandations.
Il y a de bonnes raisons à ces règles, elles ne sont pas aléatoires.

Maintenant si tu veux faire « à ta manière », c'est ton choix.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Loïc Joly

Contrairement à l'habitude,
ça peut donc être une bonne idée d'inclure d'abord les fichiers
personnels avant les #include standard.


Personnellement, dans un .cpp, j'inclue toujours en premier le .h
correspondant. L'avantage est que pour chaque .h, j'ai un endroit
(facilement retrouvable) où chaque .h est compiler en premier, et donc
je m'assure que chaque .h est indépendant.

--
Loïc

Avatar
pasde.bcausse.spam
Michel Michaud wrote:

Où vois-tu ça ?

Dans hpp tout les includes necessaires au hpp. (apres #ifndef)

Oui, ni plus, ni moins.

Dans cpp tout les includes necessaires au cpp sauf ceux du hpp
correspondant.

Exactement. Chaque chose à sa place.

Marc Boyer


J'ai dit et je continue à prétendre que c'est ce que
font naturellement la plupart des programmeurs C++ et c'est aussi ce
qui est recommandé par les livres qui font de telles recommandations.
Il y a de bonnes raisons à ces règles, elles ne sont pas aléatoires.

Maintenant si tu veux faire « à ta manière », c'est ton choix.


je debute (je viens d'un autre langage), si c'est la bonne convention
j'adopte.

--
Bruno Causse
http://perso.wanadoo.fr/othello


1 2