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 declarés en extern


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Points : 12
    Points
    12
    Par défaut tableau declarés en extern
    Salut à tous,

    Bon petit soucis qui commence à m'enerver grrrrrrr.

    j'ai un fichier avec du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unsigned char montableau[] = {1,2,3,4,5};
     
    long taille_du_tableau = sizeof(montableau);
    ca veut très bien compiler et j'obtient bien 5 dans taille_du_tableau

    ok impec mais voila je creet un 2ème fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    extern unsigned char montableau[];
    long taille_du_tableau = sizeof(montableau);
    et la ca veut pas compiler :-( pourquoi ??? et comment faire pour récupérer la taille alors dans un autre module ?

    Cordialement

    Brontozor

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Tu as le choix :
    - Utiliser std::array (ensuite tu utilises montableau.size())
    - Utiliser std::vector (ensuite tu utilises montableau.size())
    - Déclarer une variable externe contenant la taille de ton tableau

    EDIT :
    Mais au final, les variables globales sont à éviter, donc si tu peux faire autrement, fais autrement.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    oki merci de la réponse je vais tester ca ;-)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    extern ça veut dire "cette variable, tu la connais pas, elle existe et vient d'ailleurs, tu en sauras plus à l'édition des liens".
    Donc non, ça compile pas, parce que sizeof(quelque chose que je connais pas encore) ça n'a pas de sens.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 118
    Points : 158
    Points
    158
    Par défaut
    Donc non, ça compile pas, parce que sizeof(quelque chose que je connais pas encore) ça n'a pas de sens.
    Un sizeof ne se base que sur le type, or même si la déclaration est extern l'information de typage est bien là (en l'occurence elle est incomplète).

    Le problème est juste qu'il y a utilisation de crochets vides qui devrait être utilisé de paire avec une initialisation du tableau. Dans ce cas, il faut préciser la taille du tableau explicitement.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    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 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Rappelons-le, sizeof n'est pas une fonction mais un opérateur, au même titre que '-' et '!'.
    Il opère sur un type, fourni soit par une sous-expression de conversion (type) soit par une variable (voire une expression, mais je ne promets pas).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par backlash Voir le message
    Un sizeof ne se base que sur le type, or même si la déclaration est extern l'information de typage est bien là (en l'occurence elle est incomplète).

    Le problème est juste qu'il y a utilisation de crochets vides qui devrait être utilisé de paire avec une initialisation du tableau. Dans ce cas, il faut préciser la taille du tableau explicitement.
    le truc c'est que ça m'aurais arrangé, de ne pas a avoir à mettre la taille
    car cela m'oblige à la mettre dans 2 modules de code.

    bon donc si j'ai bien compris je ne peut pas obtenir la taille de mon tableau (d'une taille que je n'ai pas spécifié) par sizeof toussa parce que mon tableau est extern. alors que ce même sizeof est bien capable de me donner le résultat que j’attends si il se trouve dans le même module.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    sizeof est géré à la compilation et dépendant du type oui, mais un const char[] n'est pas un type possiblement déterminable dans ce cas.
    Il s'agit d'un tableau, de taille... inconnu en fait, donc sizeof est impossible. Puisque la variable n'est pas connue de cette unité de compilation, faire un sizeof sur une variable inconnue est impossible.

    Voir la différence entre un tableau et un pointeur
    Et une variable globale c'est mal
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par Brontozor Voir le message
    le truc c'est que ça m'aurais arrangé, de ne pas a avoir à mettre la taille
    car cela m'oblige à la mettre dans 2 modules de code.
    Dragonjoker59 t'a donné un moyen dès le premier post...
    Citation Envoyé par dragonjoker59 Voir le message
    Tu as le choix :
    - Utiliser std::array (ensuite tu utilises montableau.size())
    - Utiliser std::vector (ensuite tu utilises montableau.size())
    tu n'as pas la possibitlité d'utiliser array ou vector ? si non, pourquoi ? s'il te faut pouvoir "sortir" les données tu peux toujours utiliser ou la contiguïté des données étant garantie.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par GeantVert13 Voir le message
    Dragonjoker59 t'a donné un moyen dès le premier post...


    tu n'as pas la possibilité d'utiliser array ou vector ? si non, pourquoi ? s'il te faut pouvoir "sortir" les données tu peux toujours utiliser ou la contiguïté des données étant garantie.
    en fait je voulais pas passer par la SL que je maitrise pas ;-)
    mais c'est clair que c'est une solution, bon j'en ai trouvé une autre qui me solutionne mon problème même si je fait complètement différemment.

    C'est juste que je comprenais pas pourquoi ça ne marchais pas avec sizeof et que je voulais savoir pourquoi. mais maintenant que j'en ai eu l'explication j'ai compris.

    Donc je passe en résolu

    Merci à tous

    Cordialement

    Brontozor

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

Discussions similaires

  1. Fonction tableau de type external
    Par julesu dans le forum Fortran
    Réponses: 3
    Dernier message: 16/01/2008, 18h45
  2. Ecriture dans un tableau de données externe
    Par mister_viet dans le forum Fortran
    Réponses: 4
    Dernier message: 22/10/2007, 23h16
  3. Réponses: 4
    Dernier message: 20/09/2007, 09h57
  4. [Debutant].Declaration classe externe ?
    Par SebRs dans le forum Débuter
    Réponses: 1
    Dernier message: 19/04/2006, 20h21
  5. [Tableau]Déclaration
    Par Hoegaarden dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/09/2005, 17h59

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