Utilisation de "extern"
tablier
Membre
Suite aux réponses de mon post précédent, j'ai écris:
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:
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?
#import "leControl.h"<br /><br />static struct le_champ {<br /> NSString *lenom ;<br /> int letype ;<br />} DVDchamps[4] = { {@"zero", 0}, {@"un", 1}, {@"deux", 2}, {@"trois", 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 /> NSString *lenom ;<br /> 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?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Enlève le "static" si tu veux pouvoir y accéder !
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 :
Soit tu définis ta variable dans un .h et tu inclus le .h dans tous les fichiers utilisant ta structure...
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
Avec "extern" aussi dans ce cas, et non initialisée, sinon kaboum au lien ! :P