J'ai un problème avec l'utilisation des déclarations directes dans les fonctions. Habituellement, dans une portée globale, nous pouvons utiliser l'adresse de variable indéfinie qui a déclaré en utilisant le mot-clé extern
. Regardez l'exemple simple.Déclarations directes dans les fonctions
typedef struct Id {
int a;
} xIdRec;
typedef xIdRec* IdN;
typedef struct ChId{
int a;
IdN* b;
} ChIdRec;
extern ChIdRec Evn;
IdN Arr[] = {(IdN)&Evn};
ChIdRec Evn = {8, Arr};
Mais comment puis-je utiliser ce code pendant la définition de la fonction? Nous pouvons essayer de l'utiliser comme ça. Nous avons maintenant une erreur - error C2086: 'ChIdRec Evn' : redefinition
. Nous pouvons supprimer la première déclaration de Evn
, mais nous aurons une autre erreur - error C2065: 'Evn' : undeclared identifier
.
Comment puis-je résoudre ce problème de bit?
ummm .. le déplacer en dehors de la fonction? –
'struct ChIdRec' est une structure locale, comment peut-elle être instanciée en dehors de la fonction' F() '? – mark
Pourquoi déclarez-vous de nouveau 'extern ChIdRec Evn' localement? 'extern foo bar' ne devrait se produire qu'une seule fois, c'est-à-dire dans l'en-tête du module (le cas échéant) qui implémente' foo bar'. – alk