[C] Plusieurs fichiers .c

Plusieurs fichiers .c [C] - C++ - Programmation

Marsh Posté le 19-06-2002 à 14:37:07    

Bonjour,
 
J'ai ecrit plusieurs fichiers en C, qui, compilé separement, fonctionnent tout a fait.
Mais, quand je veux appeller une fonction de l'un dans l'autre, alors il me fait systematiquement une erreur de segmentation...
 
Faut-il preciser que la fonction que je veux apeller est dans un autre .c ?
si oui, comment ??
 
Merci !

Reply

Marsh Posté le 19-06-2002 à 14:37:07   

Reply

Marsh Posté le 19-06-2002 à 14:38:30    

il faut faire un include "tonfichieràinclure" dans celui où tu appelle une fonction de tonfichieràinclure


---------------
-@- When code matters more than commercials -@-
Reply

Marsh Posté le 19-06-2002 à 14:38:54    

oula, toi tu commances le C, hein !?
il faut un fichier .h ou tu décris toutes tes fonctions.

Reply

Marsh Posté le 19-06-2002 à 14:39:37    

pas obligé le .h mais c'est quand même bcp plus propre !  :D


---------------
-@- When code matters more than commercials -@-
Reply

Marsh Posté le 19-06-2002 à 14:40:59    

manu025 a écrit a écrit :

pas obligé le .h mais c'est quand même bcp plus propre !  :D  




 
Donc, si, on va dire que c obligé.
même si les compilo tolèrent ça, c vraiement mauvais d'inclure des .c ou .cpp direct.

Reply

Marsh Posté le 19-06-2002 à 14:43:58    

Non, c pas ca :) et je debute dans la C, mais j'ai deja fait pas mal de C++ :))
 
En fait, j'ai inclu tous les .h, mais une erreur de segmentation se produit quand d'un autre fichier .c j'essaie d'appeler une fonction de ce fichier. La fonction est donc reconnu, mais elle se plante, alors que compilees separement tout se passe bien...

Reply

Marsh Posté le 19-06-2002 à 14:44:21    

Non, c pas ca :) et je debute dans la C, mais j'ai deja fait pas mal de C++ :))
 
En fait, j'ai inclu tous les .h, mais une erreur de segmentation se produit quand d'un autre fichier .c j'essaie d'appeler une fonction de ce fichier. La fonction est donc reconnu, mais elle se plante, alors que compilees separement tout se passe bien...

Reply

Marsh Posté le 19-06-2002 à 14:49:35    

Meta_Ours a écrit a écrit :

Bonjour,
 
J'ai ecrit plusieurs fichiers en C, qui, compilé separement, fonctionnent tout a fait.
Mais, quand je veux appeller une fonction de l'un dans l'autre, alors il me fait systematiquement une erreur de segmentation...
 
Faut-il preciser que la fonction que je veux apeller est dans un autre .c ?
si oui, comment ??
 
Merci !  




Que veux tu dire par "compilé separement, fonctionnent tout a fait" ?
1) Si tu as plusieurs "main", ca ne peut pas marcher.
2) Si tu n'as pas de fichier "header" (.h) où tu déclares tes fonctions et stuctures, ça peux marcher en faisant des

Code :
  1. #include "toto.c"


mais alors, c'est pas conseillé du tout.
Ce que je te recommande de faire, ce sont des librairies :  
des groupes de fonctions associés à une des structures spécifiques.  
Pour une librairie, tu déclares structures et fonctions dans un .h et le "corps" (code koâ) des fonctions et procédures dans le .c. Tu peux en plus déclarer dans le .c des fonctions et procédures "static"

Code :
  1. static int calcul(int* intptr)
  2. {
  3. }


qui seront des fonctions "cachés" pour un utilisateur de ta librairie.  
Une fois ta librarie compilé, tu peux faire un programme C qui y fera appel.
Tu commence par un

Code :
  1. #include "ma_librairie.h"


tu appels tes diverses fonctions/structures, et tu compiles les tout en spécifiant le "include_path" (les .h) et la "library_path" (.o ou .a des tes librairies préalablement compilés)... Voilou !
Un conseil pour plus tard : Makefile.  ;)


Message édité par zi_ril_wanou le 19-06-2002 à 14:51:29

---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 14:55:09    

bon... j'ai deja fait un makefile... qui compile separement en .o, et je rassemble le tout...
 
j'ai pas plusieurs main non plus... il me ferait une erreur de lien... mais la c'est a l'execution qu'il me fait une SEGMENTATION FAULT.
 
Mon prbleme : (au risque de me repeter ) Lorsque j'apelle une fonction d'un autre ficher ( meme apres avoir inclus le .h ), il me fait une erreur de segmentation...
 
il n'y a pas un truc genre extern ou un truc du style ??

Reply

Marsh Posté le 19-06-2002 à 14:56:02    

et peut-être que t'as bien une erreur de segmentation !!! genre un pb de malloc non effectué !


---------------
-@- When code matters more than commercials -@-
Reply

Marsh Posté le 19-06-2002 à 14:56:02   

Reply

Marsh Posté le 19-06-2002 à 14:56:23    

Heu balance ton source s'il est pas trop long, par ce que là...


---------------
Le Tyran
Reply

Marsh Posté le 19-06-2002 à 14:56:58    

mais les .c fonctionnent correctement compiles separement !

Reply

Marsh Posté le 19-06-2002 à 14:57:24    

Meta_Ours a écrit a écrit :

bon... j'ai deja fait un makefile... qui compile separement en .o, et je rassemble le tout...
 
j'ai pas plusieurs main non plus... il me ferait une erreur de lien... mais la c'est a l'execution qu'il me fait une SEGMENTATION FAULT.
 
Mon prbleme : (au risque de me repeter ) Lorsque j'apelle une fonction d'un autre ficher ( meme apres avoir inclus le .h ), il me fait une erreur de segmentation...
 
il n'y a pas un truc genre extern ou un truc du style ??  




Si tu copie la fonction "incriminée" dans ton fichier c principal et que tu n'appelle que celle-ci, ça fait quoi ???


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 14:59:21    

tu compiles avec quoi ?


---------------
-@- When code matters more than commercials -@-
Reply

Marsh Posté le 19-06-2002 à 15:01:48    

manu025 a écrit a écrit :

et peut-être que t'as bien une erreur de segmentation !!! genre un pb de malloc non effectué !  




 
ça empêcherai pas de compiler.

Reply

Marsh Posté le 19-06-2002 à 15:02:16    

je compile avec gcc...
 
mais en fait laissez tomber, je crois que l'erreur n'est pas ou je la cherche...
J'ai trouve une auter piste :)
 
Je vous tiens au courant :)

Reply

Marsh Posté le 19-06-2002 à 15:04:13    

zi_ril_wanou a écrit a écrit :

 
Que veux tu dire par "compilé separement, fonctionnent tout a fait" ?
1) Si tu as plusieurs "main", ca ne peut pas marcher.
2) Si tu n'as pas de fichier "header" (.h) où tu déclares tes fonctions et stuctures, ça peux marcher en faisant des

Code :
  1. #include "toto.c"


mais alors, c'est pas conseillé du tout.
Ce que je te recommande de faire, ce sont des librairies :  
des groupes de fonctions associés à une des structures spécifiques.  
Pour une librairie, tu déclares structures et fonctions dans un .h et le "corps" (code koâ) des fonctions et procédures dans le .c. Tu peux en plus déclarer dans le .c des fonctions et procédures "static"

Code :
  1. static int calcul(int* intptr)
  2. {
  3. }


qui seront des fonctions "cachés" pour un utilisateur de ta librairie.  
Une fois ta librarie compilé, tu peux faire un programme C qui y fera appel.
Tu commence par un

Code :
  1. #include "ma_librairie.h"


tu appels tes diverses fonctions/structures, et tu compiles les tout en spécifiant le "include_path" (les .h) et la "library_path" (.o ou .a des tes librairies préalablement compilés)... Voilou !
Un conseil pour plus tard : Makefile.  ;)  




 
Mais, c complètement con ! Ce qu'il veut faire, c pas une dll, c'est un programme tout simple. Tu vas pas faire une dll pour chaque .c séparé qd même. 'faut qu'il arrive à inclure ses fonctions d'un .c à l'autre. C pas la peine de te la pèter avec tes fonctions static, et autre, t hors sujet !

Reply

Marsh Posté le 19-06-2002 à 15:04:16    

Laisse moi deviner :  

Code :
  1. /*librairie toto*/
  2. /*toto.h*/
  3. #include <stdio.h>
  4. void ajouteUnAI(int i);
  5. /*toto.c*/
  6. #include "toto.h"
  7. void ajouteUnAI(int i)
  8. {
  9. i++;
  10. }
  11. /*Programme principal*/
  12. #include <stdio.h>
  13. #include "toto.h"
  14. main()
  15. {
  16. int j=0;
  17. ajouteUnAI(j);
  18. }


 
Et ca marche pas...
Ben non et c'est normal : il faut passer par des pointeurs.


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:05:43    

el_gringo a écrit a écrit :

 
 
Mais, c complètement con ! Ce qu'il veut faire, c pas une dll, c'est un programme tout simple. Tu vas pas faire une dll pour chaque .c séparé qd même. 'faut qu'il arrive à inclure ses fonctions d'un .c à l'autre. C pas la peine de te la pèter avec tes fonctions static, et autre, t hors sujet !  




Vi, ben toi on voit que t'as jamais fait de "programmation" de ta vie... Deux trois TP peut être...


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:07:13    

zi_ril_wanou a écrit a écrit :

 
Vi, ben toi on voit que t'as jamais fait de "programmation" de ta vie... Deux trois TP peut être...  




 
Dis pas n'importe quoi !
Pourquoi tu dis ça ? pour te défendre parce que je t'agresse ? (c vrai que je t'agresse grave, ms tu m'énerves !)


Message édité par El_gringo le 19-06-2002 à 15:08:35
Reply

Marsh Posté le 19-06-2002 à 15:08:23    

FIGHT  :gun:  
 :D  :D  :D  :D  :D  :D


---------------
-@- When code matters more than commercials -@-
Reply

Marsh Posté le 19-06-2002 à 15:08:36    

el_gringo a écrit a écrit :

 
 
Dis pas n'importe quoi !  




Je donne juste quelques informations à la personne pour qu'elle parte du bon pied en C.


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:09:55    

manu025 a écrit a écrit :

FIGHT  :gun:  
 :D  :D  :D  :D  :D  :D  




 
Je sais pas pourquoi ?!?!?!
Me fait toujours agresser par des ticons !?  :D
 
edit : aurtograff


Message édité par zi_ril_wanou le 19-06-2002 à 15:10:26

---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:10:55    

zi_ril_wanou a écrit a écrit :

 
Je donne juste quelques informations à la personne pour qu'elle parte du bon pied en C.  




 
C pas des explications que tu donnes. Tu donnes juste les gros traits, histoire d'essayer de montrer que t fort. Ms c totalement incompréhensible (et inutil) pour un débutant ce que t'as dit.

Reply

Marsh Posté le 19-06-2002 à 15:12:23    

zi_ril_wanou a écrit a écrit :

 
 
Je sais pas pourquoi ?!?!?!
Me fait toujours agresser par des ticons !?  :D
 
edit : aurtograff  




 
Peut être parce que t le genre de type qui se prend des baffes. y en a comme ça.
Et forcément, l'agresseur, du point de vue de la victime, est toujours un petit con ! :D (c vrai quoi, la victime vas pas flatter son boureau non plus ! :D)


Message édité par El_gringo le 19-06-2002 à 15:13:15
Reply

Marsh Posté le 19-06-2002 à 15:13:36    

el_gringo a écrit a écrit :

 
 
C pas des explications que tu donnes. Tu donnes juste les gros traits, histoire d'essayer de montrer que t fort. Ms c totalement incompréhensible (et inutil) pour un débutant ce que t'as dit.  




Je reconnais que je suis pas bon du point de vue pédagogique.
Mais donner la solution tout droit dans le bec (bref faire un truc pour les autres), ça mène à rien. Et dégueulasser un truc pour les autres (include de .c) c'est pire que tout !!!


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:14:58    

el_gringo a écrit a écrit :

 
 
Peut être parce que t le genre de type qui se prend des baffes. y en a comme ça.
Et forcément, l'agresseur, du point de vue de la victime, est toujours un petit con ! :D (c vrai quoi, la victime vas pas flatter son boureau non plus ! :D)  




Dis donc tu tiens une sacrée couche toi !!!
Bon allez j'arrète le flood avant qu'antp ne se fâche.
Sur ceux, messieurs, bonne continuation.


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:18:56    

zi_ril_wanou a écrit a écrit :

 
Dis donc tu tiens une sacrée couche toi !!!
Bon allez j'arrète le flood avant qu'antp ne se fâche.
Sur ceux, messieurs, bonne continuation.  




 
Ouais, j'allais te dire pareil (pour le "on arrête là, ça suffit" ).
Juste, quand tu m'insultes, j'aimerai bien que tu dises pas n'importe quoi, et que tu justifies ce que tu dis, sinon c gratuit, et les insultes gratuites, c pas bien ! :non:  
A la prochaine ('faudrai que je me mette au Yoga moi qd même d'ici là!)

Reply

Marsh Posté le 19-06-2002 à 15:21:52    

el_gringo a écrit a écrit :

 
 
Ouais, j'allais te dire pareil (pour le "on arrête là, ça suffit" ).
Juste, quand tu m'insultes, j'aimerai bien que tu dises pas n'importe quoi, et que tu justifies ce que tu dis, sinon c gratuit, et les insultes gratuites, c pas bien ! :non:  
A la prochaine ('faudrai que je me mette au Yoga moi qd même d'ici là!)  




Dis donc qui a agressé l'autre en premier ???
Allez je te laisse avoir le dernier mot, sinon tu ne vas pas en dormir de la nuit.  :sarcastic:  
(Ah, ça les hormones à la puberté ça les travaille ma bonn'dame)


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:24:56    

zi_ril_wanou a écrit a écrit :

 
Dis donc qui a agressé l'autre en premier ???
Allez je te laisse avoir le dernier mot, sinon tu ne vas pas en dormir de la nuit.  :sarcastic:  
(Ah, ça les hormones à la puberté ça les travaille ma bonn'dame)  




 
Ms je t'ai insulté en te disant pourquoi. ça, c correcte, même nécessaire parfois.
Hé, t'aurais pas fait un IUT info à Clermont-Ferrand par hasard ?


Message édité par El_gringo le 19-06-2002 à 15:25:13
Reply

Marsh Posté le 19-06-2002 à 15:29:36    

el_gringo a écrit a écrit :

 
 
Ms je t'ai insulté en te disant pourquoi. ça, c correcte, même nécessaire parfois.
Hé, t'aurais pas fait un IUT info à Clermont-Ferrand par hasard ?  




Et mais moi je t'ai insulté parce que tu m'as insulté nananèreuh !!!
Pourquoi tant d'agressivité ?
 Je ne suis pas très pédagogue, je le reocnnais moi même, alors en quoi viens-tu me traiter de con ?
Qu'est qui te le prouve ?  
Et quand bien même, qu'est ce qui te pousse à m'insulter ?
 
Ca me gave : si tu veux continuer ce combat stérile : blabla ou MP.
 
P.S: non je n'ai fait ni d'iut, ni aucune étude à Clermont Ferrand.


Message édité par zi_ril_wanou le 19-06-2002 à 15:30:17

---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:30:57    

bah laisse tomber
 
Mr Gringo est coutumier du fait alors..
on va pas s'en faire pour si peu
 
LeGreg

Reply

Marsh Posté le 19-06-2002 à 15:34:15    

legreg a écrit a écrit :

bah laisse tomber
 
Mr Gringo est coutumier du fait alors..
on va pas s'en faire pour si peu
 
LeGreg  




 
Ho, "coutumier", 'faut pas exagèrer. C la 2e fois que je m'emballe sur qqn qui à rien fait ou dit contre moi !
Et puis, pour Juju le barbare, ça m'amusait, c t pas pareil...

Reply

Marsh Posté le 19-06-2002 à 15:37:45    

el_gringo a écrit a écrit :

 
 
Ho, "coutumier", 'faut pas exagèrer. C la 2e fois que je m'emballe sur qqn qui à rien fait ou dit contre moi !
Et puis, pour Juju le barbare, ça m'amusait, c t pas pareil...  




Et as tu pensé que je répondais quand il n'y avait que le premier post ???
Le temps d'allumer une clope, de pisser un coup ???
Ah ben non !
Cékilekon ???


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:47:31    

zi_ril_wanou a écrit a écrit :

 
Et as tu pensé que je répondais quand il n'y avait que le premier post ???
Le temps d'allumer une clope, de pisser un coup ???
Ah ben non !
Cékilekon ???  




 
Chuuut ! on a dit qu'on arrêtait.
(cela dit, je vois pas du tout ou tu veux en venir avec ce que tu me dit là petit bonhomme.)

Reply

Marsh Posté le 19-06-2002 à 15:50:12    

el_gringo a écrit a écrit :

 
 
Chuuut ! on a dit qu'on arrêtait.
(cela dit, je vois pas du tout ou tu veux en venir avec ce que tu me dit là petit bonhomme.)  




(Passes du premier post au mien directement, et tu comprendras [peut être ???].)


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 15:50:21    

N'empéche que sans aller aussi loin que El gringo, le coup de librairies c un peu prendre un marteau pour écraser une mouche, maintenant c vrai que j'ai pas tout lu et que je connais pas l'empleur du projet de Ours. Quoi? Comment ça je jette de l'huile sur le feu?  :sarcastic:


---------------
Le Tyran
Reply

Marsh Posté le 19-06-2002 à 15:59:51    

letoII a écrit a écrit :

N'empéche que sans aller aussi loin que El gringo, le coup de librairies c un peu prendre un marteau pour écraser une mouche, maintenant c vrai que j'ai pas tout lu et que je connais pas l'empleur du projet de Ours. Quoi? Comment ça je jette de l'huile sur le feu?  :sarcastic:  




 
Ouahh, qqn qui admet que g pas tous les tors.
ça fait plaisir.
Mais, c vrai que je m'enflamme vite, et on va arrêter là réellement, parce qu'on pourrait continuer vachement longtemps. Je vais pas aller jusqu'a te faire mes excuses, ms bon, on arrête là. :hello:

Reply

Marsh Posté le 19-06-2002 à 16:01:46    

el_gringo a écrit a écrit :

 
Je vais pas aller jusqu'a te faire mes excuses, ms bon, on arrête là. :hello:  




Pourquoi pas ???
Tu pourrais, ça ne te rabaisserais pas (bien au contraire), et je n'exulterais pas...


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le 19-06-2002 à 16:30:30    

Meta Ours, ça en est où ???


---------------
Get the Cooool... Get the cool shoe-shine !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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