C'est justement une mauvaise idée de les regrouper. Ca tue la modularité car cela lie plus fortement les modules entre eux et limite la ré-utilisabilité de ces modules. On en a parlé sur Developpez il y a peu.
C'est justement une mauvaise idée de les regrouper. Ca tue la modularité car cela lie plus fortement les modules entre eux et limite la ré-utilisabilité de ces modules. On en a parlé sur Developpez il y a peu.
Oui, on évite déjà les ainsi conflits de noms. Il ne restera plus que les problèmes de masquage par des variables locales qui ne sont pas à sous-estimer. Les théoriciens de la prog. sont par principe contre les variables globales, mais en pratique cela simplifie la vie. Ne pas avoir accès instantanément aux dimensions de l'écran quand on programme un jeu vidéo, c'est frustrant. Même en C++ authentique passer par les Truc.Getx .... c'est gonflant. Ce n'est qu'une opinion valable pour un programme modeste conçu par une seule personne. Maintenant, pour le travail collaboratif, peut-être est-il plus payant de respecter toutes les règles.Si on a besoin de variables globales (si ! bien entendu) alors il me parait au contraire très propre de les définir dans un seul fichier.
Dans le programme que je suis en train de développer seuls les fichiers main.c et global.c feront apparaître une inclusion vers gobals.h, et ce n'est pas un hasard. C'est un programme C, sans classes, mais respectant les règles de la P.O.O. tous les objets susceptibles d'avoir une certaine universalité (réutilisabilité) sont définis par un header et un fichier d'implémentation. Les fonctions d'initialisation, jouant le rôle de constructeurs, sont définis au moyen de paramètres. Les initialisations véritables se font dans globals.c au moyen d'appels de ces fonctions en passant en paramètres les variables globales définies dans le même fichier.
On peut faire des choses propres sans être dogmatique.
Ce qu'on trouve est plus important que ce qu'on cherche.
Maths de base pour les nuls (et les autres...)
Et une dernière chose: tes conventions de codage ("coding style") sont mauvaises
Pour des variables globales qui vont être, en théorie, utilisées un peu partout il faut les différencier: soit tout en majuscule soit en les préfixant par exemple avec "g_"
Les fonctions globales elles peuvent subir le même sort:
À réfléchir parce que les fonctions définie avec un #define sont en pratique déjà toutes en majuscule.
Si cette discussion n'a pas encore été résolue, je dirais que le problème vient des inclusions.
Remarque : Le fichier global.c ne sera pas inclus dans le fichier principal car tu ne l'as pas inclus dans le fichier global.h. De même tu ne l'as pas inclus dans le fichier principal, or tu as inclus dans le fichier principal le fichier global.h qui affirme l'existence d'une fonction nommée InitGlobals().
Sauf que tu as déclaré la fonction InitGloabl() dans le fichier global.c, c'est-à-dire que tout son code est dans le fichier global.c. Ceci explique le message du compilateur au sujet de InitGlobals.
Pour mieux comprendre, dis-toi ou rappelle-toi qu'un #include <mon_fichier> équivaut à copier tout le contenu de mon_fichier dans le fichier dans lequel tu as écrit la macro (#include) et à ce même emplacement. Si tu appliques cette vision des choses, tu verras que le fichier globals.c et donc tout son contenu n'est pas inclus dans le fichier principal et donc tout son contenu sera absent.
Conseille (proposition 1 ou 2):
1- Enlève le #include "globals.h" dans le fichier globals.c et écris #include "globals.c" dans le fichier globals.h (à la fin du fichier) et recompile le tout.
2- Remplace le #include "globals.h" dans le fichier principal par un #include "globals.c", ça devrait marcher.
Remarque:
J'ai bâtit cette réponse à partir de mon expérience avec l'IDE TIGCC.
Dernière modification par Invité ; 09/07/2014 à 13h19.
Non cela dépend si le compilateur voit cela comme une déclaration ou une définition et aussi de la politique "extern" par défaut du compilateur des variables.
Et aussi , faire une initialisation paresseuse des variables globales assez douteuse et exposer à la fois les fonctions et les variables globales (avec des conventions de codage mauvaises)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager