IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

rendre des Variables constantes


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut rendre des Variables constantes
    Bonjour

    Mon titre est volontairement accrocheur, mais correspond tout à fait à mon problème.
    J'ai une série de variables globales que j'initialise au lancement de mon programme en allant lire dans des fichiers de configuration (des séries de tableaux de structure).

    Est-il possible de faire que ces variables ne soient modifiable que dans un seul des fichiers de mon projet ?

    Certes, ça devrait être inutile, mais une protection n'est jamais de trop et je n'aime pas trop les variables globales. Mais ça allège drôlement mon code de les avoir passées globales ! Avant il fallait les passer d'un appel à l'autre dans des grosses structures ou des tableaux de pointeurs. Je pense même que ça devrait accélérer mon code qui devient parfois un peu lent !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Cela me parait tordu en effet.

    Je vois une solution, faire en gros deux interfaces (pour une class de stockage de tes variables), l'un permettant l'accès et la modification pour ton fichier "admin" et une interface qui ne possède qu'un accesseur.
    Mais après rien n'empêchera celui qui reprend le programme d'utiliser l'autre interface.

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Tu me parles de class ? Il faudrait passer au C++ ?
    Tes interfaces, c'est quoi ?

    J'avoue que je ne connais pas et comme je n'enseigne pas le C++, mais le C, j'essaie de rester à faire du C pour m'entraîner dans le domaine que j'enseigne (enfin, je n'enseigne que les bases).

    nb : c'est bien pour éviter le plus possible les problèmes qui sont entre le chaise et l'ordinateur que je fais ça... Référence à ta signature
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Citation Envoyé par troumad Voir le message
    Tu me parles de class ? Il faudrait passer au C++ ?
    Tes interfaces, c'est quoi ?

    J'avoue que je ne connais pas et comme je n'enseigne pas le C++, mais le C, j'essaie de rester à faire du C pour m'entraîner dans le domaine que j'enseigne (enfin, je n'enseigne que les bases).

    nb : c'est bien pour éviter le plus possible les problèmes qui sont entre le chaise et l'ordinateur que je fais ça... Référence à ta signature
    On peut faire de l'objet en C en fait, et en C++ le mot clé struct ou class c'est la même chose.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Non, en C, class n'est pas un mot clé valide (sauf si j'ai déjà une fin du monde en retard), et tu ne peux pas écrire un constructeur.

    Par contre, tu peux approximer l'objet en C

  6. #6
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Citation Envoyé par leternel Voir le message
    Non, en C, class n'est pas un mot clé valide (sauf si j'ai déjà une fin du monde en retard), et tu ne peux pas écrire un constructeur.

    Par contre, tu peux approximer l'objet en C
    Relis moi.

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je commence à comprendre...

    Mais mon cas semble plus compliqué !
    En fait, j'ai un tableau (dynamique) à plusieurs dimensions, voici un exemple :
    extern struct_psi *** talents_psi;
    et j'aimerai y accéder de manière simple, comme ceci par exemple :
    talents_psi[j][i][k].nom

    J'ai l'impression que ta fonction getVariable1 ne convient pas trop
    Si je récupère talents_psi, j'ai une série de pointeur et je peux modifier ce qui est pointé.

    Ensuite, mon but est d'accélérer le programme. Si chaque fois que je je souhaite lire une variable, je dois passer par un appel de fonction, je ne crois pas y gagner
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Par défaut
    Non, il parle de classe de stockage (static ou extern en gros). Pas de C++.

    Le principe est simple, dans ton .h tu déclares des fonctions pour accéder en lecture seule à tes variables :
    Dans ton .c, tu déclares ta variable comme static(comme ça elle ne peut être manipulée que depuis ce fichier, ainsi qu'un setter (static lui aussi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    static int variable1;
     
    /* Ce code ne peut être appelé que depuis ce fichier */
    static void setVariable1(int value)
    {
      variable1 = value;
    }
     
    /* Par contre, celui-ci est global. */
    int getVariable1()
    {
      return variable1;
    }
    Donc depuis l'extérieur du fichier .c, la seule fonction qui permet d'accéder à ta variable ne retourne qu'une copie de celle celle-ci. C'est un exemple volontairement simpliste, avec une seule variable d'un type de base, mais l'idée est là.

Discussions similaires

  1. Rendre une variable constante
    Par iliasvow dans le forum Général Java
    Réponses: 4
    Dernier message: 18/07/2014, 09h15
  2. Réponses: 19
    Dernier message: 14/08/2007, 14h41
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo