Signaler

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

Posez votre question scheme 50Messages postés dimanche 28 décembre 2008Date d'inscription 18 mai 2009 Dernière intervention - Dernière réponse le 26 janv. 2009 à 00:25 par lami20j
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 :)
Utile
+1
plus moins
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é ?  
Utile
+0
plus moins
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 ;-)
Utile
+0
plus moins
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;
}
Utile
+0
plus moins
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 :)

Utile
+0
plus moins
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
Utile
+0
plus moins
C'était uniquement pour faciliter ma compréhension? :D

Je ne vois vraiment aucun autre avantage^^

Merci encore de ton attention
lami20j 21513Messages postés jeudi 4 novembre 2004Date d'inscription Modé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




Utile
+0
plus moins
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é =)
Utile
+0
plus moins
Re,

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

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !