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 :

variable globale de type non prédéfini à la compilation


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 22
    Points
    22
    Par défaut variable globale de type non prédéfini à la compilation
    bonjour

    Je cherche à déclarer une variable globale mais dont le type n'est pas prédéfini.
    En clair pouvoir avoir un if avant et donc pas la déclarer en dehors de toute fonctions.

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void mafct(char * test){}
        if (test = "1")
            struct type1 variable;
        else if (test = "2")
            struct type2 variable;
    }
     
    int main(int argc, char *argv[]){
        mafct(argv[1]);
     
        utilisation de variable ....
    }
    j'ai vu qu'avec le prépocesseur on peut faire un if mais je ne voit pas comment l'utiliser avec un argument de argv.


    Est-ce que quelqu'un pourrait maider ?
    Merci.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    On peut faire des choses de ce type avec de l'héritage: déclarer un pointeur global d'un type de base, et ensuite y mettre un objet d'un type dérivé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Base {...};
    class Type1 : public Base {...};
    class Type2 : public Base {...};
    Base *variable = 0;
     
    void mafct(const char * test){}
        if (strcmp(test, "1")==0)
            variable = new Type1(...);
        else if (strcmp(test, "2")==0)
            variable = new Type2(...);
    }

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    Bonjour,

    Tu souhaite faire une variable dite "globale" déclaré dans une fonction de type void ?

    Je ne comprends pas trop la :/

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    FunK92 :
    Je veux simplement qu'après l'execution d'une fonction quelconque, qui peut renvoyer n'importe quoi (int, char ...), certaine de ses variables soient accessibles par tout le reste du programme.
    Sachant que ce n'est pas toujours le mm type je ne peut pas faire un fct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct type1 ma_fct(arguments ...);
    remy72:
    je n'ai pas bien saisi la notion d'heritage avec class et public. Est-ce que c'est du c ou du c++ ?

    Merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    remy72:
    je n'ai pas bien saisi la notion d'heritage avec class et public. Est-ce que c'est du c ou du c++ ?
    c'était en effet du C++.

    Pour rester en C, on pourrait :
    • mettre plusieurs variables globales (une par type),
    • mettre une variable globale de type union,
    • mettre une variable globale de type void*,
    • ...


    Est-ce que les bouts de code qui utilisent cette variable globale "connaissent son type" ? Un exemple d'utilisation de cette variable nous éclairerait peut-être.

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    Tu peux éventuellement créer une structure contenant un element de chaque type.

    Puis dans ta fonction, retourner un membre de cette structure en fonction de tes besoins.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Discovery Voir le message
    Je veux simplement qu'après l'execution d'une fonction quelconque, qui peut renvoyer n'importe quoi (int, char ...), certaine de ses variables soient accessibles par tout le reste du programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #define ENTIER 0
    #define FLOTTANT 1
    #define REEL  2
    #define CARACTERE 3
    #define CHAINE 4
     
    typedef union pValeurStruct
    {
       int i ;
       float f ;
       double d ;
       char c ;
       char *s ;
    } ValeurStruct ;
     
    typedef struct pMaStruct {
       int Type ;
       ValeurStruct Valeur ;
    } MaStruct ;
     
     
    void mafct(char * test, MaStruct *MaMienne){
       sscanf ( Test, &(MaMienne->Type) );
    }
     
    int main(int argc, char *argv[]){
        MaStruct AMoi ;
     
        mafct(argv[1], &AMoi);
     
        /* utilisation de variable .... */
        switch ( AMoi.Type )
         {
            case ENTIER :
                  ....
                  break ;
     
            case CHAINE :
                  ....
                  break ; 
         }
    }

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Ok merci à tous les trois.
    Je suis donc obligé dans tous les cas de faire des partis de code différentes à un endroit ou à un autre pour chaque type, soit pour le choisir soit pour l'utiliser.
    Vous avez l'air tous de dire que l'union de mes différents types est ce qu'il y a de plus simple.
    C'est donc ce que je vais uiliser.

    Merci

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Discovery Voir le message
    bonjour

    Je cherche à déclarer une variable globale mais dont le type n'est pas prédéfini.
    En clair pouvoir avoir un if avant et donc pas la déclarer en dehors de toute fonctions.
    Ce n'est pas possible. Le type est statique en C. Par contre on sait créer dynamiquement une variable d'un type donné (T) avec malloc(), et stocker son adresse dans un pointeur du même type (T *) ou non typé (void *).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déclaration des variables globales en javascript non recommandée
    Par DarkPoster14 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/01/2013, 12h31
  2. Variable globale et publique non disponible ailleurs
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/06/2009, 14h19
  3. Créer une variable globale de type tableau
    Par beegees dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2008, 00h26
  4. [E-03] Utiliser une variable globale de type Const pour mes colonnes
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/10/2008, 20h48
  5. variable avec un type non défini
    Par gign2585 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/05/2007, 18h10

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