Frage

In der C -Sprache möchte ich auf eine globale statische Variable außerhalb des Rahmens der Datei zugreifen. Lassen Sie mich wissen, wie möglich, wie möglich ist. Eine der Methoden besteht darin, eine externe globale Variable den Wert der statischen Variablen zuzuweisen,

In Datei AC

static int val = 10;
globalvar = val;

In Datei BC

extern globalvar;

In diesem Fall werden Änderungen in VAL (Datei AC) jedoch in GlobalVAR in (Datei BC) nicht aktualisiert.

Bitte lassen Sie mich wissen, wie ich dasselbe erreichen kann.

Danke, Sikandar.

War es hilfreich?

Lösung

Nun, wenn Sie die Datei ändern können a.c Dann machen Sie einfach val nicht statisch.

Wenn Sie ändern können a.c kann aber nicht machen val Nicht statisch (warum?), Dann können Sie einfach einen globalen Zeiger darauf erklären a.c

int *pval = &val;

und in b.c tun

extern int *pval;

Dadurch können Sie auf den aktuellen Wert von zugreifen val durch *pval. Oder Sie können eine nicht statische Funktion einführen, die den aktuellen Wert von zurückgibt val.

Wenn Sie jedoch noch einmal von anderen Übersetzungseinheiten darauf zugreifen müssen, machen Sie es einfach nicht statisch.

Andere Tipps

Sie können den globalen variablen Zeiger auf die globale statische Variable machen.

/* 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;
}

Beim Laufen:

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

Sie können nicht auf eine statische Variable der Dateiebene außerhalb der Datei zugreifen.

Wenn Sie das wirklich tun müssen, haben Sie ein paar Möglichkeiten.

  1. Fügen Sie der Datei mit der statischen Variablen eine Zubehörfunktion hinzu. Das Schöne ist, dass dies den Zugriff von außerhalb der Datei auf schreibgeschützte Zugriff einschränkt:

    int read_static () {return val; }

  2. Lassen Sie das statische Qualifikationsmerkmal fallen und machen Sie die Variable zu einem globalen.

Lösung 1:

In Datei AC

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

In Datei BC

extern int *globalvar;

Lösung 2:

Anstatt eine andere Variable zu haben, um die Adresse der statischen Variablen zu übergeben, wodurch einige Speicher -Bytes -Verschwendung hinzugefügt werden, machen Sie die statische Variable selbst als extern.

Lösung 2 wird empfohlen, wenn Sie jedoch auf die Änderung der statischen Variablen in extern beschränkt sind, verwenden Sie Lösung 1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top