Créer un projet en c avec Kate [Résolu/Fermé]

scheme 50 Messages postés dimanche 28 décembre 2008Date d'inscription 18 mai 2009 Dernière intervention - 25 janv. 2009 à 18:56 - Dernière réponse : lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention
- 26 janv. 2009 à 00:25
Bonjour à tous, j'aimerais créer un projet en C sous Kate. J'aimerais en fait séparer les fonctions d'un même programme en différents fichiers, comme ceci:

http://www.siteduzero.com/uploads/fr/files/8001_9000/8068.png

J'ai tenté de créer un dossier, puis d'écrire mes différentes fonctions dans des fichiers différents, et les headers des fonctions de mes fichiers dans d'autres fichiers. Puis j'ai inclus les noms des headers dans les directives de préprocesseur de mon fichier main.c.

Mais comme je m'y attendais, à la compilation du fichier contenant mon fichier main.c mes fonctions ne sont pas inclues comme elles le devraient, donc elles ne sont pas lues par l'ordinateur avant d' exécuter la fonction main, donc je reçois un message d'erreur m'indiquant "undefined reference to "nom_de_ma_fonction" ". Savez-vous d'où vient le problème et comment le résoudre pour parvenir à mon but ?

Merci d'avance :)
Afficher la suite 
50Messages postés dimanche 28 décembre 2008Date d'inscription 18 mai 2009 Dernière intervention

9 réponses

lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention - 25 janv. 2009 à 19:45
+1
Utile
Re,

Compilation
cd /home/scheme/ triple
gcc -c triple.c main.c
gcc triple.o main.o -o progtriple
Exécution
./progtriple
Cette réponse vous a-t-elle aidé ?  
lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention - 25 janv. 2009 à 19:02
0
Utile
Salut,

Un problème similaire on a résolu ici http://www.commentcamarche.net/forum/affich 10663818 probleme lecture dans un fichier en c?#9

Mais j'ai eu besoin de fichiers pour le faire ;-)
scheme 50 Messages postés dimanche 28 décembre 2008Date d'inscription 18 mai 2009 Dernière intervention - 25 janv. 2009 à 19:41
0
Utile
Merci de me répondre aussi vite :)

Admettons que j'ai créé un dossier "triple" dans /home/scheme/

Dedans j'ai placé 3 fichiers: main.c, triple.h et triple.c

main.c:

#include <stdio.h>
#include <stdlib.h>
#include "triple.h"

long triple(long nombre);

int main(int argc, char *argv[])
{
printf("%ld\n", triple(5));
return 0;
}

triphe.h:

long triple(long nombre);

triple.c:

long triple(long nombre)
{
return 3*nombre;
}
scheme 50 Messages postés dimanche 28 décembre 2008Date d'inscription 18 mai 2009 Dernière intervention - 25 janv. 2009 à 20:16
0
Utile
Merci beaucoup!

Si j'ai bien compris il faut d'abord compiler tous les fichiers .c, et une fois qu'on a tous les fichiers binaires on les linke en donnant un nom à notre programme ?

Pourquoi est-ce nécessaire de séparer la compilation en 2 étapes ?

edit: je viens de voir qu'on peut réduire la compilation en 1 étape, avec gcc main.c triple.c -o progtriple

c'est donc toi qui fait le choix de la séparer en 2 étapes, pourrais-tu me dire pourquoi?

Merci encore de ton aide :)

lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention - 25 janv. 2009 à 20:36
0
Utile
Re,

Au début tu étais bloqué ;-)
Savez-vous d'où vient le problème et comment le résoudre pour parvenir à mon but ?

Ensuite ma réponse t'as permis de comprendre par toi même ;-) et la satisfaction est plus grande ;-))

edit: je viens de voir qu'on peut réduire la compilation en 1 étape, avec gcc main.c triple.c -o progtriple

c'est donc toi qui fait le choix de la séparer en 2 étapes, pourrais-tu me dire pourquoi?


Maintenant tu comprends pourquoi? ;-)

Tu peux allez encore plus loin, et créer un fichier Makefile
scheme 50 Messages postés dimanche 28 décembre 2008Date d'inscription 18 mai 2009 Dernière intervention - 25 janv. 2009 à 23:20
0
Utile
1
C'était uniquement pour faciliter ma compréhension? :D

Je ne vois vraiment aucun autre avantage^^

Merci encore de ton attention
lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention - 25 janv. 2009 à 23:25
Re,

Où et quand j'ai dit que je la préfères?

Suite à ton message initial, je ne pouvais pas savoir à quelle manière je dois le faire pour t'aider tout simplement.
Donc j'ai choisi la version détaillée, pas à pas.

Maintenant si tu n'est pas content, alors la prochaine fois je te donnerai une réponse à la manière Perl et tu verras ;-DDD




scheme 50 Messages postés dimanche 28 décembre 2008Date d'inscription 18 mai 2009 Dernière intervention - 26 janv. 2009 à 00:24
0
Utile
C'est moi qui l'ai déduit car j'ai vu que sur l'autre topic d'aide, tu avais également utilisé l'argument -c, j'ai alors pensé que tu l'utilisais tout le temps :p
Maintenant je connais la raison, et elle est effectivement excellente =)

Je suis très content de l'aide que tu m'as apporté =)
lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention - 26 janv. 2009 à 00:25
0
Utile
Re,

j'ai alors pensé que tu l'utilisais tout le temps :p
Mais non, je suis un sacré paresseux ;-))