Probleme compilation pour programme fragmenté [Résolu] - C - Programmation
Marsh Posté le 03-07-2004 à 11:21:17
ta variable globale dans main.c
char *monstre
dans monster.c
extern char *monstre
comme ca il va ller le chercher a l exterieur..
apres tu peu te faire un fichier extern.c avec toutes tes variables gloables et un fichier extern.h que tu inclus a tous les fichiers suaf extern.c .. dans ce .h tu met les declarations sous la forme "extern .." , comme ca elles seront modifiables ds chaque fichier..
Marsh Posté le 03-07-2004 à 11:37:28
Voila je me suis toujours demander ce que c'etait EXTERN
bon et biens parfois des problemes sont vraiment des problemes betes...
J'orai penser a plus compliquer mais voila... on resout tout d'un simple petit mot reservé dont on ignorais sa fonction
Merci pour cette reponse rapide et pour les conseils
Marsh Posté le 03-07-2004 à 11:44:10
DeirElBahri a écrit : apres tu peu te faire un fichier extern.c avec toutes tes variables gloables et un fichier extern.h que tu inclus a tous les fichiers suaf extern.c .. dans ce .h tu met les declarations sous la forme "extern .." , comme ca elles seront modifiables ds chaque fichier.. |
les globales, c'est déjà suffisemment le bordel au niveau des collisions, c'est un très mauvais conseil de tout mettre dans un même .h
segmente au maximum !
Marsh Posté le 03-07-2004 à 11:58:15
Les variables globales, c'est mal!
A+,
Marsh Posté le 03-07-2004 à 12:39:29
Oui, sans blague!
Par contre, des variables a visibilite controllée et avec des accesseurs, c'est bien.
A+,
Marsh Posté le 03-07-2004 à 13:00:57
Ouis je veux bien le croire que c'est mal, mais ceci dit vaut mieux une variable global que toujours faire passer cette variable en argument a + de 50 fonctions ^^
ou je me trompe oO
Marsh Posté le 03-07-2004 à 15:27:57
Tu te trompes en effet. Si tu as 50 fonctions qui ont besoin de changer la valeur d'une variable, alors certainement que c'est codé comme une savate. Et les accesseurs ne sont pas faits pour les chiens.
A+,
Marsh Posté le 03-07-2004 à 15:46:51
gilou a écrit : Les variables globales, c'est mal! |
c'est ce que je pense tous les jours en voyant mon chef de projet
Marsh Posté le 03-07-2004 à 21:42:46
drasche a écrit : c'est ce que je pense tous les jours en voyant mon chef de projet |
je ne programme qu'avec des goto et des variables globales
Marsh Posté le 04-07-2004 à 01:53:38
Je ne sais pas c'est quoi des accesseurs ^^
mais bon je m'adresse peut être a une mauvaise personne la... vu comment celle ci répond je crois qu'on avance a rien
cette personne se reconnaitra et puis la pauvre.. elle doit avoir des problemes en ce moment je la comprend
bon courage Gilou
@+
Marsh Posté le 04-07-2004 à 03:04:15
bref si ton code est propre les globales c'est pas la mort, ni les statiques, ni les breaks.. t auras tjrs des gens qui te dirons que ce que tu fais est mal parcequ'ils ont deja testé et que ca marchait pas, a cause de leur code..
Marsh Posté le 04-07-2004 à 08:56:28
DeirElBahri a écrit : bref si ton code est propre les globales c'est pas la mort, ni les statiques, ni les breaks.. t auras tjrs des gens qui te dirons que ce que tu fais est mal parcequ'ils ont deja testé et que ca marchait pas, a cause de leur code.. |
Y'a des circonstances qui justifient les emplois de chacun de ces trucs, mais il faut savoir reconnaitre ce type de circonstance (par exemple, des goto dans un automate a etat fini peuvent optimiser un code beaucoup plus lourds a ecrire sans) et surtout pas aller employer les globales a tout bout de champ.
Vas un jour maintenir un programme de plusieurs centaines de milliers de lignes, avec plusieurs centaines de globales, et tu comprendra ton malheur! J'ai deja rencontré ca cas (programme ecrit par d'ex programmeurs basic rapidement reconvertis au C, pas de doc, programmeurs partis dans d'autres equipes...)
A+,
Marsh Posté le 04-07-2004 à 09:11:37
yoskeletone a écrit : Je ne sais pas c'est quoi des accesseurs ^^ |
Ben peut etre que lire un minimum d'ouvrages sur la programmation, ca te permettrait de savoir ce qu'il faut faire pour programmer, et connaitre le sens de notions de base.
En C, c'est relativement simple: si tu as besoin d'acceder en de nombreux points de ton programme a une variable, plutot que de manipuler une variable globale a tout bout de champ, tu declare une variable statique quelque part, tu l'initialise a sa declaration, et tu declares aussi deux fonctions publiques (les accesseurs) une qui va retourner la valeur courante de ta variable (accesseur Get) et une qui modifier la valeur de ta variable (accesseur Set). Ca te permet de ne modifier la valeur de ta variable uniquement au moyen de l'accesseur Set (et donc de controller a quel moment cette variable peut etre modifiée), de faire de la validation de valeur avant de changer la valeur de ta variable, dans le corps de ton accesseur Set, de ne pas passer inutilement cette variable en argument a des fonctions, mais d'en recuperer la valeur au moment ou on en a besoin au moyen de l'accesseur Get, ...
Bref, c'est pas une panacée, mais ca permet d'eviter une bonne partie des pbs qui peuvent survenir avec une variable globale.
A+,
Marsh Posté le 03-07-2004 à 11:15:15
Hello World !
Voila une introduction au sujet qui convient parfaitement ici
N'est-ce pas la premiere chose que l'on voit lorsque on decouvre le monde du C ?
Bon venons en a mon probleme
J'ai programmé un jeux rpg en mode console (et ouais, la couleurs, les maps avec le scroll, les monstres ^^ les quetes) lol enfin je me fait trop chier mais c trop fun msdos (enfin le mode console)
heu donc voila vu que c un rpg, vous vous doutez bien que mon code comporte un grand nombre de procedure... et voila g voulu les separer de ma feuille MAIN.C pour en faire des feuille genre MONSTRE.c, MENU.C, AFFICHAGE.C etc etc...
mais maintenant il me sort un probleme tout con lors de la compilation
jvous explique donc ce probleme (tout con, euh jlai deja dit )
il me dit que dans le fichier AFFICHAGE.C le tablea MONSTRE n'est pas declarer....
HORS mon tableau MONSTRE est declarer dans mon MAIN.c parceque ct une variable global lorsque mon code etait dans la meme feuille ...
donc maintenant il veut que je REdeclare mon tableau dans AFFICHAGE.C ... mais si je fais ca.... le tableau dans MAIN.C et dans AFFICHAGE.c seront different !!! Breff!!
Je pige pas pourquoi il veut pas compiler !!!!!! il faut quand meme pas redeclarer toutes les variable globale du MAIN.c ???!!!!
sinon je ne voit pas l'utilité de segmenté un programme...
bouuuh je suis nulll aidez moi
Message édité par Profil supprimé le 04-07-2004 à 12:09:15