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

  FORUM HardWare.fr
  Programmation
  C

  Inclure des fichiers en C.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Inclure des fichiers en C.

n°1845413
Cid
Posté le 30-01-2009 à 22:46:27  profilanswer
 

Bonjour
J'essaye de developper une application en C actuellement et pour se faire j'ai besoin d'inclure dans un fichier .h un autre fichier .h. Cependant est ce que ds le #include, présent ds mon premier fichier.h, je me le chemin a partir d'ici vers l'autre fichier.h ? ou je pars de l'endroit ou mon main se trouve?
 
un petit exemple sera plus simple.
j'ai un dossier "travail" qui contient, mon "main", un dossier "include" et un dossier "lib".  
 
Dans le dossier include, j'ai un fichier "math.h" ou je veux inclure le fichier calcul.h qui se trouve dans lib.
Je fais #include "lib/calcul.h"
ou
#include "../lib/calcul.h" ?
 
merci d'avance:)

mood
Publicité
Posté le 30-01-2009 à 22:46:27  profilanswer
 

n°1845421
billgatesa​nonym
Posté le 30-01-2009 à 23:44:55  profilanswer
 

Cela peut varier d'un compilateur à l'autre (par exemple, avant qu'il n'y ait de standards bien établis, le Borland C ne traitait pas les includes exactement de la même manière que le Microsoft C). En général, on ne met pas le chemin. Ce dernier est habituellement spécifié dans les paramètres de compilation.

n°1845445
Un Program​meur
Posté le 31-01-2009 à 09:37:03  profilanswer
 

Il y a un standard bien établi?  Je n'en connais pas.  Et je ne connais qu'une tentative de synthétiser les comportements observés (http://www.bourguet.org/cpp/include).  S'il y en a d'autres -- comportement ou tentative de les rassembler tous --, je suis intéressé.
 
En ce qui concerne les chemins relatifs, je ne me souviens pas avoir jamais utilisé un compilateur qui considérait les chemins relatifs autrement que qu'un nom de fichier simple: il est considéré relativement à tous les répertoires cherchés (donc une forme avec "" va généralement le chercher relativement au fichier contenant la directive si on n'a pas désactivé volontairement ou involontairement la possibilité).


Message édité par Un Programmeur le 31-01-2009 à 09:37:39
n°1845462
billgatesa​nonym
Posté le 31-01-2009 à 10:56:27  profilanswer
 

Voir l'article de Wikipedia sur le preprocesseur qui donne quelques renseignements de base : http://en.wikipedia.org/wiki/C_preprocessor
 
Voir le standard actuel du C qui est en lien en bas de la page de Wikipedia : http://www.open-std.org/jtc1/sc22/ [...] /n1124.pdf
Ce document de 500 pages contient deux paragraphes (6.4.7 Header names et 7.1.2 Standard headers) plus particulièrement dédiés à la directive #include.
 
Voir la documentation du compilateur, par exemple la documentation de Microsoft Visual Studio 2005 sur la directive #include : http://msdn.microsoft.com/en-us/li [...] S.80).aspx . La description commence par ce qui est standard et se poursuit par une partie qui est spécifique à ce compilateur.
 
Bref, comme dit précédemment, d'habitude on ne met pas le chemin, juste le nom du fichier. Le chemin est indiqué, si besoin est, dans les paramètres de compilation que l'on spédifie soit sur la ligne de commande, soit à l'aide d'une boite de dialogue de configuration du projet.

n°1845541
Un Program​meur
Posté le 31-01-2009 à 15:31:17  profilanswer
 

billgatesanonym a écrit :

Voir l'article de Wikipedia sur le preprocesseur qui donne quelques renseignements de base : http://en.wikipedia.org/wiki/C_preprocessor


Rien sur le sujet qui nous concerne: où précisément sont cherchés les fichiers inclus.

 
Citation :

Voir le standard actuel du C qui est en lien en bas de la page de Wikipedia : http://www.open-std.org/jtc1/sc22/ [...] /n1124.pdf
Ce document de 500 pages contient deux paragraphes (6.4.7 Header names et 7.1.2 Standard headers) plus particulièrement dédiés à la directive #include.

 

idem

 
Citation :

Voir la documentation du compilateur...

 

Comme je le disais: rien de standardisé -- même de manière informelle -- et pas de ressources décrivant les comportements observés pour s'assurer que ce qu'on utilise a un minum de portabilité.

 
Citation :

Bref, comme dit précédemment, d'habitude on ne met pas le chemin, juste le nom du fichier. Le chemin est indiqué, si besoin est, dans les paramètres de compilation que l'on spédifie soit sur la ligne de commande, soit à l'aide d'une boite de dialogue de configuration du projet.

 

Une habitude qui est beaucoup moins universelle que tu ne le penses.  Il est courant de spécifier un répertoire pour des fichiers publics (voir POSIX et tous les <sys/XXX> par exemple, en C++ un exemple bien connu de cette technique est boost dont on inclut les entêtes par <boost/XXX> ). Il est encore plus courant de spécifier des répertoires pour des fichiers privés inclus dans des fichiers publics, en les incluant avec la forme "" (voir le répertoire bits de gcc).


Message édité par Un Programmeur le 31-01-2009 à 15:38:00
n°1845613
billgatesa​nonym
Posté le 31-01-2009 à 18:36:08  profilanswer
 

tu ne le penses.

Ca suffit. Vous êtes télépathe ? Vous êtes de la police de la pensée ? Non, alors s'il vous plait, ne faites pas comme d'autres personnes de ce forum qui invectivent et tutoient ceux qui répondent bénévolement et gentiment pour aider celui qui pose la question initialement. Sur les forums plus civilisés, par exemple les forums anglais, les gens ne critiquent pas les solutions présentées par d'autres intervenants. Tant pis si quelqu'un d'autre se trompe. Ce qui compte c'est que chacun puisse exposer son point de vue, s'il est sincère, par rapport à la question initiale sans se montrer désagréable vis-à-vis des autres intervenants.
 
Bien sûr que je connais boost/.. et sys/... et même ddk/.... etc. Je n'ai pas dit qu'il ne fallait jamais mettre un chemin, ou du moins un partie de chemin dans une directive #include. Mais la question posée concerne un fichier ".h" qui ne fait partie des headers standards. Donc, ce header ne doit pas, en théorie, être mis dans le répertoire, ou le sous-répertoire des headers standards. Sa meilleure place, selon moi et ma petitie expérience de 20 ans de programmation en C, mais on peut penser autrement, est de mettre ce header maison dans un répertoire qui est référencé dans le makefile.

n°1845760
Joel F
Real men use unique_ptr
Posté le 01-02-2009 à 11:28:48  profilanswer
 

billgatesanonym a écrit :

tu ne le penses.

Ca suffit. Vous êtes télépathe ? Vous êtes de la police de la pensée ? Non, alors s'il vous plait, ne faites pas comme d'autres personnes de ce forum qui invectivent et tutoient ceux qui répondent bénévolement et gentiment pour aider celui qui pose la question initialement. Sur les forums plus civilisés, par exemple les forums anglais, les gens ne critiquent pas les solutions présentées par d'autres intervenants. Tant pis si quelqu'un d'autre se trompe. Ce qui compte c'est que chacun puisse exposer son point de vue, s'il est sincère, par rapport à la question initiale sans se montrer désagréable vis-à-vis des autres intervenants.


 
Et on arrive sur un forum façon developpez.con ou le rapport signale sur bruit est proche de 0.
 
Aprés deux points :
1/ on ne te retiens pas :o
2/ faudra aussi apprendre à lire le sarcasme et l'ironie dans les posts et arreter de prendre otut au zeroieme degré :o

n°1845770
billgatesa​nonym
Posté le 01-02-2009 à 12:04:23  profilanswer
 

Citation :

on arrive sur un forum façon developpez.con ou le rapport signale sur bruit est proche de 0

Pourtant, il existe des sites bien modérés qui prospèrent. Le problème de developpez.com doit donc être causé par autre chose.  

Citation :

on ne te retiens pas

Merci, ça fait plaisir ! C'est le monde à l'envers ! Il faudrait au contraire garder ceux qui répondent aux questions posées, et ne pas retenir ceux qui trollent en prenant à partie les autres forumeurs.

Citation :

faudra aussi apprendre à lire le sarcasme et l'ironie dans les posts et arreter de prendre otut au zeroieme degré :o

Qu'est-ce que c'est que ce nouveau procès d'intention ? Pourquoi pensez-vous que je ne connaisse pas le sarcasme et l'ironie, etc. C'est un jugement qui est faux. Arrêter de juger les autres.
 
Dans le "tu penses" cité plus haut, il n'y avait pas de sarcasme et d'ironie. C'était juste pour me contredire. Cette contradiction était injustifiée parce que je n'avais pas dit que l'absence de chemin dans le #include était "universel" mais "habituel", et je l'avais dit en connaissance de cause. Je fais du C depuis vingt ans. J'ai vu des centaines de milliers de code C écrites par des personnes très diverses, et j'ai constaté qu'il y a très peu de cas ou le chemin (surtout le chemin absolu) était indiqué dans cette directive du préprocesseur.
 
Quand à l'absence de norme, là encore, on a cherché à me contredire d'une manière exagérée car le C a une norme ISO. J'ai connu l'époque antérieur, où il n'y avait pas encore de norme, où plutôt quand le livre de K & R était la norme sans être très suivie. C'était autre chose que maintenant où la plupart des compilateurs C sont assez proche les uns des autres, surtout sur le sujet ed la directive #include. Par ailleurs, comme c'est une question d'un débutant, il ne me semble pas opportun de souligner que la directive #include serait utilisée de manière très différente d'un compilateur à l'autre, car les différences sur ce point précis sont en réalité assez minimes, et notamment, il ne faudrait pas que ce débutant, comme tant d'autres, tombent dans le piège des anciens et des nouveaux headers standards du C++ (iostream, etc), en pensant qu'il n'y aurait pas de norme.
 
Enfin, vous pouvez continuer à troller et à dénigrer les autres. De mon côté, je continuerai à essayer de répondre aux questions des internautes quand j'ai la réponse et à me défendre quand on me prend à parti avec des "tu penses" et des "apprends à lire".

n°1845786
Joel F
Real men use unique_ptr
Posté le 01-02-2009 à 12:43:14  profilanswer
 

billgatesanonym a écrit :

 
Par ailleurs, comme c'est une question d'un débutant, il ne me semble pas opportun de souligner que la directive #include serait utilisée de manière très différente d'un compilateur à l'autre, car les différences sur ce point précis sont en réalité assez minimes, et notamment, il ne faudrait pas que ce débutant, comme tant d'autres, tombent dans le piège des anciens et des nouveaux headers standards du C++ (iostream, etc), en pensant qu'il n'y aurait pas de norme.


 
Bah si tu avais sortie ça et juste ça sans te braquer sur le 'tu penses", on aurait rien dit [:dawa]
 
PS : se renseigner sur la signification de :o avant de bondir

n°1845806
matafan
Posté le 01-02-2009 à 14:16:26  profilanswer
 

Je comprend pas trop ce que tu veux dire sur developpez.com. Je trouve que là bas il y a très peu de bruit, en tout cas beaucoup moins qu'ici, parce que les modérateurs enlèvent systématiquemen tout ce qui est "bruit". En tout cas sur les forums C.

mood
Publicité
Posté le 01-02-2009 à 14:16:26  profilanswer
 

n°1858155
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-03-2009 à 18:11:33  profilanswer
 

matafan a écrit :

Je comprend pas trop ce que tu veux dire sur developpez.com. Je trouve que là bas il y a très peu de bruit, en tout cas beaucoup moins qu'ici, parce que les modérateurs enlèvent systématiquemen tout ce qui est "bruit". En tout cas sur les forums C.


Merci !
 
http://www.gloco.ca/library/sciseaux.gif


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

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

  Inclure des fichiers en C.

 

Sujets relatifs
Besoin d'aide pour mon prog en C#[RESOLU][PowerShell 1.0]parcours et suppression de fichiers
[Résolu] Empêcher Ctrl-C et Ctrl-Alt-Fx en Shell Linux[RESOLU] C# - Expression Régulière
Concatenation de 2 fichiers excel.Découper un fichier word en plusieurs fichiers via une macro
Convertisseur en langage Ctypelist et C++Ox
[C#] - Envoi d'email avec variablesIntrospection en C++ ?
Plus de sujets relatifs à : Inclure des fichiers en C.


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