Déclarer des variables dans un fichier externe

Déclarer des variables dans un fichier externe - C - Programmation

Marsh Posté le 16-11-2004 à 14:49:14    

Je cherche à établir un programme le plus modulaire possible. J'ai déclaré mes fonctions dans "ma_librairie.h" et de même j'aimerais créer un fichier "mes_declarations.jesaispasquoi" où je pourrais regrouper l'ensemble de mes déclarations de variables, ceci pour alléger mon programme principal car j'ai une grande quantité de variables à déclarer. Comment puis-je faire cela?
 
J'ai essayé d'écrire un "mes_declarations.h" avec dedans  
 
const double var1;
...
const double vari;
...
const double varn;
 
mais ça compile pas.


Message édité par GROFRED le 16-11-2004 à 14:52:28
Reply

Marsh Posté le 16-11-2004 à 14:49:14   

Reply

Marsh Posté le 16-11-2004 à 15:21:54    

Code :
  1. #include "mes_declarations.h"

Reply

Marsh Posté le 16-11-2004 à 15:22:27    

enfin d'après mes souvenirs ! je commence à avoir un doute

Reply

Marsh Posté le 16-11-2004 à 15:23:09    

Utilise extern dans le .h, et crée un .c avec tes variables.
Les variables globales c'est _mal_. Tu cherches à décomposer en modules, mais avec ton gros fichier de variables globales tu obtiens un couplage fort et donc de modulaire ça en a que l'aspect.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-11-2004 à 16:31:08    

Si les var globales c'est mal, comment faire alors pour éviter d'avoir 100 lignes de déclarations dans le fichier principal?
 
Autre problème: Ce programme est destiné à être utilisé par un quidam qui doit pouvoir utiliser le programme en changeant ces variables, mais ne doit pas avoir accès au source. Or si je déclare les très nombreuses variables utilisées par le programme en local, l'utilisateur doit disposer de la source pour les changer et donc voir le source ce que je ne souhaite pas. Je ne vois pas l'utilisateur rentrer le programme en ligne de commande avec 100 paramètres! J'imaginais plus simplement que l'utilisateur puisse éditer les variables dans un fichier externe sans avoir accès au code...
 
:-(

Reply

Marsh Posté le 16-11-2004 à 16:33:00    

Et initialiser ces variables à partir d'un fichier texte lu par ton appli c'est pas possible ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-11-2004 à 17:10:02    

du style:
 
fscanf(fichier,"%f",&variable)...
 
Mouais j'imagine que ça peut le faire comme ça mais bon j'ai pas lu bcp de bien de fscanf et puis il faut identifier dans le fichier texte formaté la chaine de caractère correspondant à la variable et récupérer la valeur derrière. Ca doit pouvoir se faire mais je vois ça compliqué...

Reply

Marsh Posté le 16-11-2004 à 17:13:47    

ca ne l'est pas
et puis de tte manière avec l'histoire des headers l'utilisateur n'aurait pas pu modifier les paramètres (à moins de recompiler l'appli)

Reply

Marsh Posté le 16-11-2004 à 17:34:07    

Utilise fgets & sscanf.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-11-2004 à 17:38:25    

OK mais le fichier d'entrée du prog doit être bien formaté du style:
 
fichier de données "donnees.dat"
 
nomvar1: var1
 
je suppose que l'acquisition de var1 s'écrirai dans le programme principal comme ça:
 
fscanf("donnees.dat","%f",&nomvar1)
 
Mais comment ça va réagir du fait de la présence du nom de la variable devant sa valeur? Je vais chercher des trucs sur l'acquisition de données dans un fichier. Merci ça me paraît plus clair maintenant. Au fait, est-ce que "fget" est mieux que "fscanf"?


Message édité par GROFRED le 16-11-2004 à 17:39:26
Reply

Marsh Posté le 16-11-2004 à 17:38:25   

Reply

Marsh Posté le 16-11-2004 à 17:48:12    

Ben ça va essayer de convertir la valeur... Tu peux utiliser %*s pour ignorer un champ, mais le mieux est de lire et tester le nom de la valeur afin de valide le fichier entré.
Utilise fgets & sscanf et non fscanf.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-11-2004 à 23:38:54    

D'abord, notes que tu confond declaration et definition. Ce que tu as fait dans ton .h ce sont des definitions de variables, et ce n'est jamais une bonne idee de faire ca dans un .h.
 
Si tu veux faire les choses proprement, il te faut (les noms de fichier c'est pour l'exemple, appeles-les comme tu veux) :
 

  • Un declaration.h ou tu declare tes variables avec "extern" (extern const double var2;)
  • Un definition.c ou tu definit tes variables (const double var1 = ...;)
  • Un fichier code.c ou tu met ton code. Ce fichier inclue declaration.h


Ensuite tu compiles definition.c, tu compiles code.c, et tu link les deux.
 
declaration.h :

Code :
  1. extern const double var1;
  2. extern const double var2;


definition.c :

Code :
  1. const double var1 = 1.0;
  2. const double var2 = 2.0;


code.c :

Code :
  1. #include <stdio.h>
  2. #include "declaration.h"
  3. int
  4. main()
  5. {
  6.         printf("var1 = %f\n", var1);
  7.         printf("var2 = %f\n", var2);
  8. }


Puis :

/home/nicolas/tmp% gcc -o appli definition.c code.c
/home/nicolas/tmp% ./appli  
var1 = 1.000000
var2 = 2.000000


 
Edit : y'a une phrase qui n'etait pas finie.


Message édité par matafan le 17-11-2004 à 16:14:49
Reply

Marsh Posté le 17-11-2004 à 11:11:15    

merci pour vos contribution!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed