Travailler sur plusieurs fichiers

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Travailler sur plusieurs fichiers

Messagede YuGiOhJCJ le 20 Aoû 2006 23:29

Salut,
voilà mes programmes commencent à être composés de plusieurs fonctions et structures. Je souhaiterai séparer le code sur plusieurs fichiers:
main.c
functions.c
structures.c

Ainsi ce sera mieux organisé.
J'ai essayé de faire ça mais ça me sort pleins d'erreurs.
Pourtant je n'ai fait que déplacer le code dans un autre fichier.
Code: Tout sélectionner
$ gcc main.c -lSDLmain -lSDL
In file included from main.c:8:
functions.c:7: error: erreur de syntaxe before '*' token
functions.c: Dans la fonction « InitSprite »:
functions.c:10: error: `sprite' undeclared (first use in this function)
functions.c:10: error: (Each undeclared identifier is reported only once
functions.c:10: error: for each function it appears in.)
functions.c:10: error: `picture' undeclared (first use in this function)
functions.c:35: error: `DOWN' undeclared (first use in this function)
functions.c: Hors de toute fonction :
functions.c:54: error: erreur de syntaxe before '*' token
functions.c: Dans la fonction « InitBackground »:
functions.c:57: error: `background' undeclared (first use in this function)
functions.c:57: error: `picture' undeclared (first use in this function)
functions.c: Hors de toute fonction :
functions.c:76: error: erreur de syntaxe before '*' token
functions.c: Dans la fonction « UpdateSprite »:
functions.c:78: error: `sprite' undeclared (first use in this function)
functions.c:82: error: `UP' undeclared (first use in this function)
functions.c:85: error: `DOWN' undeclared (first use in this function)
functions.c:88: error: `RIGHT' undeclared (first use in this function)
functions.c:91: error: `LEFT' undeclared (first use in this function)
functions.c: Hors de toute fonction :
functions.c:112: error: erreur de syntaxe before '*' token
functions.c: Dans la fonction « UpdateBackground »:
functions.c:114: error: `sprite' undeclared (first use in this function)
functions.c:114: error: `video_width' undeclared (first use in this function)
functions.c:115: error: `background' undeclared (first use in this function)
functions.c:123: error: `video_height' undeclared (first use in this function)


main.c fait appel aux 2 autres fichiers:
Code: Tout sélectionner
#include "functions.c"
#include "structures.c"


Pourquoi ça ne fonctionne pas?
Faut-il une fonction main( ) dans chaque fichier?
Merci :D
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 21 Aoû 2006 01:05

il te manque quelques notions de bases sur le processus de compilation en C.

on n'inclue pas les fichiers ".c", ils se compilent tous séparéremnt puis une édition de lien est faite. je t'explique cela :

lorsque tu compiles ton fichier .c sans option, gcc suppose qu'il est le seul fichier de ton programe et construit un exécutable, mais cela se fait en deux étapes :

compilation : transformation de ton fichier source en fichier "objet" (.o avec gcc) qui contient du code exécutable ainsi que des informations sur les symboles (fonctions et variables globales) qui son présents et celles qui manquent dans ton fichier. Les fichiers objets ne sont pas exécutables par l'OS tels quels

edition de liens : mise en relation de plusieurs fichiers .o pour construire un éxécutable, l'editeur de lien fait alors les liens entre les symboles des différents fichiers et construit l'entête du binaire pour qu'il soit reconnu par l'OS et qu'il soit exécutable.

l'option -c de gcc permet de créer un fichier objet à partir d'un fichier .C
dans ton exemple :

Code: Tout sélectionner
gcc -c main.c
gcc -c functions.c
gcc -c structures.c


Les 3 commandes précédentes ont construit les fichiers main.o, functions.o et structures.o
puis l'édition de liens :

Code: Tout sélectionner
gcc main.o functions.o structures.o -o monprogramme

crée le fichier exécutable monprogramme à partir des fichiers objets main.o, functions.o et structures.o. Si tout c'est bien passé, ton exécutable fonctionne comme prévu.

deux points tout de même :

- il faut bien distinguer les déclarations et les définitions et à mon avis ton fichier structures.c contiens plus de déclarations que de code exécutable. réuni toutes tes déclarations dans un header (fichier .h) et inclue le dans tes sources (fichiers .c). Un tutoriel de C pourra t'être utile pour cela.

- les fichiers Makefile permettent d'éviter de taper toujours les même fonctions de compilation, ils permettnt en plus de ne compiler que ce qui est nécessaire à chaque fois, cherche un tuto simple sur les fichiers Makefile et ecris toi en un ! (pas besoin de savoir utiliser les fonctionnalités avancées de Makefile, un truc de base suffit largement)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 21 Aoû 2006 18:06

Ok je vais essayer tout ça.
Je te tiens au courant si je progresse. :oui:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer


Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron