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 :

déclaration tableau en global


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Par défaut déclaration tableau en global
    Bonjour,

    je veux déclarer 2 tableaux en global avant le main, mais je ne sais pas leur allouer une taille "variable" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const int ligne=6; const int colonne=7;
    int grille[ligne][colonne], etat[colonne];
    ne marche pas.
    Est-ce que je dois tout mettre dans le main (avec toutes les autres fonctions qui font appel à ces deux tableaux)?
    et si je veux avoir ligne et colonne en entrée (scanf)?

    merci (je débute :/)

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Bonsoir,

    D'apres ce que j'ai tester et ce que je sais, voici ce que je peut te dire.

    Pour declarer une variable global, il faut la declarer tout au debut.
    On ne peut que declarer la variable et l'initialiser si tu veux.


    dans le cas d'un tableau dynamique, tu ne peux que le declarer.
    si tu essai un malloc, ca plantera.

    Donc, tu declare ta variable tableau en global, et quelque part dans le code, tu fait ton malloc pour mettre a la bonne taille.


    Cependant, je te deconseille tres fortement ce proceder. Si tu peux l'eviter, vaudrait mieux.

    Des exemple :
    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
     
     
    /* Variable global */
     
    /* Autorisé */
    int ****tableauComplexe;
    int *Tableau1D;
     
    int test = 0;
    char autretest;
     
     
    int main(void)
    {
     
        return 0;
    }
    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
     
     
    /* Variable global */
     
    /* PAS Autorisé */
    int ****tableauComplexe = (int****) malloc (18*sizeof(int***));
     
     
    int test; /* Ca autoriser */
     
    test = 8; /* Ca non */
     
     
    int main(void)
    {
     
        return 0;
    }

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Bienvenu sur les forums de DVP,

    je veux déclarer 2 tableaux en global avant le main, mais je ne sais pas leur allouer une taille "variable"
    Tu ne peux pas leur allouer une taille variable.

    (je débute :/)
    Alors, prend de bonnes habitudes et n'utilise pas de variables globales sauf si tu y es vraiment obligé.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Par défaut
    ok, j'ai bien compris que si je veux que l'utilisateur rentre la taille du tableau je dois déclarer dans le main.

    ma question était plus comment déclarer sous la forme int tab[nomvariable] en global, puisque si je déclare nomvariable avant (avec une valeur) ça marche pas.

    en cherchant j'ai finalement trouvé que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define nomvariable valeur
    fait l'affaire

    Sinon je suis curieux de savoir pourquoi il faut éviter les variables globales.
    En fait je mettrais bien tout en local mais le programme est un exercice et le prof a exigé que les tableaux soient déclarés en global pour "être accessible à toutes les fonctions du programme" (même si ça complique).
    Il est évident que ce n'est pas nécessaire pour qu'ils soient accessibles donc je me disais qu'il devait y avoir un intérêt à déclarer en global, et apparemment c'est le contraire...

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    #define nomvariable valeur
    Oui, mais il faut bien noter que le tableau n'est pas de taille variable.

    En fait je mettrais bien tout en local mais le programme est un exercice et le prof a exigé que les tableaux soient déclarés en global pour "être accessible à toutes les fonctions du programme" (même si ça complique).
    C'est précisément la plus mauvaise des raisons utilisées pour justifier l'utilisation des variables globales . Mais tu n'y es pour rien, il faut bien que tu fasses ce qu'il demande.

    Sinon je suis curieux de savoir pourquoi il faut éviter les variables globales.
    Ce sont des vraies pestes.

    1- Dès que le programme devient un peu conséquent, il devient difficile de savoir qui modifie cette variable (et quand et pourquoi).
    Pour le savoir, il faut relire TOUTES les fonctions.
    Si la valeur de la variable devient fausse à cause d'une erreur, qui a bien pu y mettre une valeur erronée ? Où est située l'erreur ?

    2- Normalement, une fonction doit être autonome dans le sens où si je lis son en-tête et son code, je sais ce qu'elle fait. Inversement, si je veux une fonction qui réalise quelque chose, je dois pouvoir l'écrire sans me préoccuper (outre mesure) du code externe. Je peux la tester pour la valider indépendamment du code qui sera réellement utilisé simplement sur la base que je connais le rôle des paramètres et que je sais ce qu'elle doit faire. Elle forme une entité (utilisable et réutilisable).
    Si elle utilise des variables globales, tout ceci devient faux : la fonction dépend de quelque chose qui lui est extérieur et qu'elle ne maîtrise pas totalement.

    qu'il devait y avoir un intérêt à déclarer en global,
    Ca peut être le cas. Dans un cas apparenté à ta situation, le tableau peut être si grand qu'on ne peut le mettre en variable locale (car la mémoire sur la pile est limitée). On peut alors envisager de le construire en allocation dynamique ou comme une variable globale, on dispose alors de toute la mémoire disponible. Même dans ce dernier cas, on prendra souvent la précaution de le déclarer plutôt dans une fonction comme étant static ce qui empêchera les autres fonctions d'y accéder sauvagement sans passer par les listes de paramètres pour éviter les inconvénients mentionnés au dessus.

Discussions similaires

  1. Variable tableau en global
    Par Neosquall2 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/06/2008, 09h25
  2. [Tableaux] Déclaration tableau multidimension
    Par P4board dans le forum Langage
    Réponses: 2
    Dernier message: 22/10/2007, 21h18
  3. déclaration tableau javascript
    Par kohsaka dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/06/2007, 16h44
  4. Réponses: 3
    Dernier message: 20/12/2006, 17h13
  5. Réponses: 1
    Dernier message: 09/03/2006, 17h25

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