Fehler: multiple storage classes in declaration specifiers

Gast #2448252
Lesenswert?

Hallo,
hab n Problem:

In Datei main.c:
1
volatile int8_t enc_delta;          // -128 ... 127
2
static int8_t last;
3

4
void main (void )
5
{
6
}


und in Datei Drehgeber.c:
1
extern volatile int8_t enc_delta;          // -128 ... 127
2
extern static int8_t last;
3

4
void encode_init( void )
5
{ 
6
 new ^= 1;                   // convert gray to binary
7
}

liefert:
multiple storage classes in declaration specifiers


Was kann man da machen
Gast #2448360
Lesenswert?

Da schrieb jemand in einem älteren Thread:
static - Wenn du eine globale Variable mit static deklarierst, ist diese
nur innerhalb der Übersetzungseinheit, also in dem c-file wo du diese
anlegst sichtbar. Ausserhalb der Übersetzungseinheit kann auf diese
Variable nicht zugegriffen werden.

Klar.
Aber was macht ich wenn ich die Variable in einer anderen Datei brauche?
Gast #2448635
Lesenswert?

Joachim schrieb:
> Da schrieb jemand in einem älteren Thread:
>
> static - Wenn du eine globale Variable mit static deklarierst, ist diese
>
> nur innerhalb der Übersetzungseinheit, also in dem c-file wo du diese
>
> anlegst sichtbar. Ausserhalb der Übersetzungseinheit kann auf diese
>
> Variable nicht zugegriffen werden.
>
>
>
> Klar.
>
> Aber was macht ich wenn ich die Variable in einer anderen Datei brauche?

Eine Schnittstellenfunktion schreiben, die als Rückgabeparameter jene 
besagte static-Variable dem Aufrufer der anderen Übersetzungseinheit 
kopiert?

Das nennt man Datenkapselung und kommt aus der Objekt orientierten 
Programmierung.

/* Schnittstelle für Zugriff auf Static Variable */
z. B. uint8 GetStaticVariableFromKomponente(void);

uint8 GetStaticVariableFromKomponente(void)
{
return StaticVariable;
}

Die Funktion "GetStaticVariableFromKomponente" muß dann ebenfalls in der 
gleichen C-Datei sich befinden, wo die Static Variable deklariert ist.

In der Header-Datei dieser C-Datei wird dann über

extern GetStaticVariableFromKomponente(void);

der Zugrif öffentlich gemacht.

Man kann sie auch in der verwendeteten anderen C-Datei eintragen. Das 
wird mit zunehmender Komplexität unübersichtlich.

Vielleicht hilft mein Vorschlag weiter. Viel Erfolg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren