communication entre 2 fichiers .c pas dans le meme dossier grace a un

communication entre 2 fichiers .c pas dans le meme dossier grace a un - C - Programmation

Marsh Posté le 29-05-2008 à 11:53:11    

salut a tous
 
voila mon petit souci
 
j'ai un fichier .c qui appelle dans son main une fonction "fct_calcul()" située dans un autre fichier .c

fichier_principal.c

#include "fichier_secondaire.c"
...
void main ()
{
fct_calcul()
}
fichier_secondaire.c
 
"void fct_calcul()
{
blablabla
}
 
jusque là pas de souci a la compil
 
 
 
maintenant ce que je voudrais, c'est placé mon fichier principal dans un dossier et le secondaire dans un autre et relayer l'appel de la fonction par un fichier .h situé entre les 2 dossier
 
 
dossier
relais.h
   --> rep1
      -->principal.c
   --> rep2
      -->secondaire.c
 
comment faire ? on m'a parlé d'une fonction utilisant "extern", j'ai aussi testé en déclarant le prototype de ma fonction dans le .h mais ca marche pas. :sarcastic:  
 
on m'a aussi parlé de modifier les propriétés en "forcant les include" avec /FI dans les paramètres C/C++mais j'ai pas reussi a le faire fonctionner.
 
merci à tous ceux qui m'aideront :hello:


Message édité par maverick78960 le 29-05-2008 à 12:00:32
Reply

Marsh Posté le 29-05-2008 à 11:53:11   

Reply

Marsh Posté le 29-05-2008 à 12:00:15    

Code :
  1. #include "fichier_secondaire.c"
 

Non. Pas d'inclusion de code directement. Pour être propre, il faut passer par l'édition d'un fichier en-tête, par exemple "fichier_secondaire.h", qui recensera les prototypes des fonctions implémentées dans le .c

 
Code :
  1. void main ()
 

Non plus. Les deux seuls prototypes standards de main() sont :
int main(void);
et
int main(int, char**);

 


Ensuite, pour ta question, c'est simple.
Mettons la configuration suivante :
DIRA/source1.c
DIRB/source2.c
DIRB/source2.h

 

Tu vas écrire dans source1.c :
#include "source2.h"

 

Et à la compilation, tu écriras (avec gcc, sur un autre compilateur regarde la documentation correspondante) :
gcc -c source2.c
gcc -I DIRB -c source1.c
gcc -o <nom de l'executable final> DIRA/source1.o DIRB/source2.o

 

Le paramètre -I permet d'indiquer au compilateur un répertoire supplémentaire dans lequel rechercher les fichiers en-têtes.


Message édité par Elmoricq le 29-05-2008 à 12:00:27
Reply

Marsh Posté le 29-05-2008 à 12:04:13    

merci de ta réponse rapide mais j'ai pas compris ton dernier paragraphe, surement parce que je suis sous visual.
 
Tu vas écrire dans source1.c :
#include "source2.h"
 
ca ok mais pour le "source2.c" je suppose que je change rien, et dans le "source2.h" je met quoi ?
 
merki

Reply

Marsh Posté le 29-05-2008 à 12:05:01    

Les prototypes des fonctions implémentées dans source2.c

Reply

Marsh Posté le 29-05-2008 à 12:07:37    

j'obtiens les erreurs LNK2019 et LNK1120

Reply

Marsh Posté le 29-05-2008 à 12:08:53    

Tu es trop précis, là, pourrais-tu être plus vague ?

Reply

Marsh Posté le 29-05-2008 à 12:09:34    

trop précis sur les erreurs ?

Reply

Marsh Posté le 29-05-2008 à 12:14:00    

pour le moment j'ai
 
dossier 1
 
secondaire.h avec  

Code :
  1. void fct_calcul();


soit la déclaration de mon prototype
 
 
secondaire.c avec  

Code :
  1. void fct_calcul()
  2. {
  3. blablabla
  4. }


 
et le dossier 2 avec  
principal.c

Code :
  1. #include "../dossier1/secondaire.h"
  2. int main()
  3. {
  4. fct_calcul();
  5. }


Message édité par maverick78960 le 29-05-2008 à 12:22:46
Reply

Marsh Posté le 29-05-2008 à 12:40:38    

en fait j'ai trouvé en configurant les propriétés de visual
 
pour info :  
 
Properties -> Configuration properties -> C/C++ -> General -> Additional include directories

Reply

Marsh Posté le 29-05-2008 à 13:40:14    

[:romf]
 
(je ne peux pas t'aider sur Visual, je ne connais pas cet IDE)

Reply

Marsh Posté le 29-05-2008 à 13:40:14   

Reply

Marsh Posté le 29-05-2008 à 14:03:03    

merci de ton aide Elmoricq

Reply

Sujets relatifs:

Leave a Replay

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