Utilisation de "extern"

tabliertablier Membre
20:28 modifié dans API AppKit #1
Suite aux réponses de mon post précédent, j'ai écris:
#import &quot;leControl.h&quot;<br /><br />static struct le_champ {<br />&nbsp;  NSString	*lenom ;<br />&nbsp;  int		letype ;<br />} DVDchamps[4] = { {@&quot;zero&quot;, 0}, {@&quot;un&quot;, 1}, {@&quot;deux&quot;, 2}, {@&quot;trois&quot;, 3} } ;<br /><br /><br />@implementation leControl<br /><br />......place des méthodes<br /><br />}<br />

J'obtiens le fonctionnement désiré: la structure est initialisée par le compilateur, et elle est accessible par toutes les méthodes de l'implementation.

Problème: si la portée de la structure est bien globale, je devrais pouvoir y accéder directement depuis d'autres objets en utilisant "extern".

K & R : une variable externe doit être définie en dehors de toute fonction; ainsi une place lui est réservée en mémoire. La variable doit être déclarée dans chaque fonction qui désire y avoir accès soit par une déclaration explicite extern soit implicitement par le contexte. ...... etc
Je n'arrive pas à  trouver la bonne place dans un autre objet pour écrire:
extern struct le_champ {<br />&nbsp;  NSString	*lenom ;<br />&nbsp;  int		letype ;<br />} DVDchamps[4] ;<br />

J'ai essayé à  l'intérieur de la méthode ou je veux acceder à  la structure, j'obtiens une erreur de compilation. j'ai essayé en tête de l'implémentation, la compilation se passe bien mais l'application plante au lancement.

Qui a une idée la-dessus?

Réponses

  • schlumschlum Membre
    20:28 modifié #2
    Non, regarde dans mes derniers messages du sujet, "extern" c'est pour récupérer une variable "auto"...
    Enlève le "static" si tu veux pouvoir y accéder !
  • psychoh13psychoh13 Mothership Developer Membre
    20:28 modifié #3
    En effet, une variable static n'est pas faite pour être externe, c'est un peu l'opposé.

    Mais le mot clé extern c'est pour déclaré une variable globale qui n'est pas dans un fichier publique (comme les .h), alors soit tu définis ta variable dans ton .m et dans ton .h tu mets :
    extern struct le_champ DVDchamps[4];
    


    Soit tu définis ta variable dans un .h et tu inclus le .h dans tous les fichiers utilisant ta structure...
  • tabliertablier Membre
    20:28 modifié #4
    Merci pour ces explications.  :P
    Elles m'ont obligé à  reprendre le "k & R" et à  relire correctement le passage sur les variables statiques.
    Ce que je n'avais pas vu: "statique" limite la portée d'une variable interne à  la fonction dans laquelle elle est définie et la portée d'une variable externe au fichier source ou elle est définie.
    A+, merci  et à  une santé qui nous est chère, la nôtre  :p   :p
  • schlumschlum Membre
    20:28 modifié #5
    dans 1196099082:

    Soit tu définis ta variable dans un .h et tu inclus le .h dans tous les fichiers utilisant ta structure...


    Avec "extern" aussi dans ce cas, et non initialisée, sinon kaboum au lien !  :P
Connectez-vous ou Inscrivez-vous pour répondre.