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 :

tableau initialisé avec variable globale + warning iso C90


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut tableau initialisé avec variable globale + warning iso C90
    Bonjour,
    pour un projet d'informatique je dois réaliser un mini-jeu utilisant les tableaux 2d. Le probleme : on me demande d'initialiser les tableau avec des variables globales mais forcement le compilateur n'apprécie pas et je me retrouve avec une page de warning : ISO C90 forbids variable length array 'tableau' [-Wmvla].
    Le programme fonctionne bien mais c'est plutot désagréable d'avoir tous ces warning a la compilation, donc même si c'est un peu "moche" j'aurais aimé savoir si il y avait un moyen pour éviter ces warning (code a rajouter lors de la compilation par exemple).
    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonjour,

    Réponses courte : les VLA n'ont été introduits en C qu'à partir de C99.

    Ce n'est pas le fait d'initialiser un tableau avec des variables globales qui ennuie ton compilateur mais le fait que tu recoures à des VLA, c'est-à-dire que tu déclares des tableaux dont la taille est définie par la valeur d'une variable, fût-elle globale ou non d'ailleurs. Cela s'explique par le fait qu'en principe, c'est le compilateur qui calcule à l'avance la place dont il aura besoin pour son tableau, ce qui lui permet de savoir quelle quantité de mémoire réserver dans la pile et où placer les autres variables. Le fait de déclarer d'utiliser une variable pour définir cette taille oblige ton compilo à laisser tout cela en suspens, à reléguer le tout au runtime, et à mettre en place des mécanismes logiciels pour faire les calculs nécessaires à ce moment-là.

    Tu as malgré tout le droit de le faire, mais le concept n'a été introduit en C qu'avec C99. Si ton compilateur est configuré par défaut pour compiler en C ANSI standard, il va se plaindre. Compiler en C89/C90/Ansi est toujours une bonne idée, d'abord pour la portabilité, ensuite pour éviter d'utiliser d'emblée des ressources qui ne sont pas nécessaires. Par contre, si tu démarres aujourd'hui un projet destiné à être compilé sur des plateformes contemporaines (et même si c'est à destination de machines-cibles plus anciennes), tu as tout-à-fait le droit de bénéficier du confort moderne et de t'appuyer sur le C99. Dans ce cas, ajoute « -std=c99 » à ta ligne de commande si tu utilises GCC.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ta réponse je comprends bien le problème maintenant. Par contre j'avais déjà essayé la commande -std=c99 dans le compilateur mais ca n'a jamais marché, mes warning sont toujours là.
    J'ai par exemple essayé gccgraph projet.c -o projet -std=c99
    (j'utilise gccgraph car j'utilise une bibliotheque graphique qui necessite cet "appel" lors de la compilation)

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Dans ce cas, montre-nous ton code ici, encadré par les balises [CODE] et [/CODE].

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Le problème c'est que mon code fais pas loin de 2000 lignes
    C'est un problème ou ca ne dérange pas ?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    2000 lignes, ça commence à faire beaucoup : il vaut mieux en faire une archive zip ou tar.gz et la passer en pièce jointe à ton commentaire. Mais tu peux d'emblée déposer, dans le corps de ton message, le contenu de la fonction dans laquelle se produit l'erreur.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    L'erreur se situe à tous les endroits ou j'utilise un tableau initialisé avec mes variables globales, c'est à dire aussi bien dans mon main que dans mes fonctions et procédures, d'où le nombre conséquent de warning
    Voila l'archive : projet.zip

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Ça fonctionne chez moi avec une version authentique de GCC, sous Linux. Essaie de passer « -std=c99 » en tant que toute première option de gccgraph (avant « projet.c -o projet »), puis d'écrire « --std=c99 » à la place de de « -std=c99 » (ajoute un tiret).

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Tout essayé rien ne marche
    Et oui j'avais oublié de préciser mais je compile sur un environnement Unix
    Tu a réussi à compiler mon programme sans aucun warning et à l’exécuter ?

Discussions similaires

  1. SelectCommand avec variable globale
    Par Bibbox dans le forum ASP.NET
    Réponses: 4
    Dernier message: 02/04/2009, 12h26
  2. [CS3-AS3] Pb avec variable globale.
    Par iceman2001 dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 24/09/2008, 13h16
  3. problème avec variables globales
    Par johnburton54 dans le forum VBA Access
    Réponses: 5
    Dernier message: 12/06/2007, 10h20
  4. Réponses: 4
    Dernier message: 04/02/2007, 20h39
  5. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 18h20

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