Question

Dans le langage C, je veux accéder à une variable statique globale en dehors du champ d'application du fichier. Permettez-moi de connaître la meilleure façon possible de le faire. L'une des méthodes consiste à attribuer une variable globale extern la valeur de la variable statique,

Dans le fichier a.c

static int val = 10;
globalvar = val;

Dans le fichier b.c

extern globalvar;

Mais dans ce cas, toute modification val (fichier a.c) ne seront pas mis à jour dans globalvar (fichier av. J.-C.).

S'il vous plaît laissez-moi savoir comment puis-je obtenir le même.

Merci, Sikandar.

Était-ce utile?

La solution

Eh bien, si vous pouvez modifier a.c de fichier, puis juste faire val non statique.

Si vous pouvez modifier a.c mais ne peut pas faire non statique val (pourquoi?), Alors vous pouvez simplement déclarer un pointeur global pour en a.c

int *pval = &val;

et b.c faire

extern int *pval;

qui vous permettra d'accéder à la valeur actuelle de val par *pval. Ou vous pouvez introduire une fonction non statique qui retourne la valeur actuelle de val.

Mais encore une fois, si vous avez besoin d'y accéder à partir d'autres unités de traduction, tout simplement le rendre non-statique.

Autres conseils

Vous pouvez faire le pointeur variable globale à la variable statique globale.

/* file  a.c */
static int a = 100; /* global static variable not visible outside this file.*/
int *b = &a; /* global int pointer, pointing to global static*/


/* file b.c */
extern int *b; /* only declaration, b is defined in other file.*/

int main()
{
        printf("%d\n",*b); /* dereferencing b will give the value of variable a in file a.c */
        return 0;
}

En cours d'exécution:

$ gcc *.c && ./a.out
100

Vous ne pouvez pas accéder à l'extérieur du fichier un niveau de fichier variable statique.

Si vous avez vraiment besoin de le faire, vous avez deux choix.

  1. Ajouter une fonction accesseur dans le fichier qui a la variable statique. La bonne chose est ce qui limite l'accès à l'extérieur du fichier d'accès en lecture seule:

    int read_static () {return val; }

  2. Laissez tomber le qualificatif statique et faire la variable globale un.

Solution 1:

Dans le fichier a.c

static int val=10;
int *globalvar =&val;

Dans le fichier b.c

extern int *globalvar;

Solution 2:

Au lieu d'avoir une autre variable à passer l'adresse de la variable statique ajoutant ainsi peu de mémoire octets gaspillage, rendre la variable statique elle-même comme extern.

Solution 2 est recommandée, mais dans le cas si vous êtes limité à changer la variable statique extern, solution d'utilisation 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top