Forum: Mikrocontroller und Digitale Elektronik C - Konstrukt mit Header und globalen ariablen


von uc_SD (Gast)


Lesenswert?

Ich habe folgendes Konstrukt:
1
#include unter.h
2
3
int main(void)
4
{
5
// Hier würde ich gerne zustand weiterverarbeiten
6
zustand = FALSE; // -> Compiler Fehler
7
}

und unter.c:
1
BOOL zustand = TRUE;
2
void unter()
3
{
4
zustand = FALSE;
5
}

Die globale Variable unter würde ich gerne in meiner main Funktion 
weiterverarbeiten, der Compiler meckert aber. Ich inkludiere doch 
unter.h in der main, eigentlich müßte die Variable doch dem Compiler 
bekannt sein?

Wenn ich die Variable direkt über der int main(void) deklariere kommt es 
ebenso zu einem Compilerfehler. Dies ist für mich auch logisch, der 
andere Fehler erschließt sich mir jedoch nicht ganz.

von Mandrake (Gast)


Lesenswert?

Suche mal nach dem Schlüsselwort "extern" in deinem C-Buch.

von Thomas E. (thomase)


Lesenswert?

uc_SD schrieb:
> #include unter.h

Da fehlen die Anführungsstriche.

uc_SD schrieb:
> der andere Fehler erschließt sich mir jedoch nicht ganz.

Zeig dein ganzes Programm inkl. deiner unter.h. Sonst wird das auch 
jedem anderen so gehen.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Weil es gerade zufällig gestern oder vorgestern im PC-Forum hochgeholt 
wurde

Beitrag "Re: Den Befehl extern"

und wenn du das durch hast, dann gleich den hier hinten nach
FAQ: Header File - wie geht das

von Dummschwaetzer (Gast)


Lesenswert?

Die Main Funktion ist nicht in unter.c?

Warum sollte der Compiler eine Variable, die in unter.c definiert ist, 
kennen, wenn Du unter.h einbindest?

Schreib über die Main Funktion:

extern BOOL zustand;

von Karl H. (kbuchegg)


Lesenswert?

Dummschwaetzer schrieb:
> Die Main Funktion ist nicht in unter.c?
>
> Warum sollte der Compiler eine Variable, die in unter.c definiert ist,
> kennen, wenn Du unter.h einbindest?
>
> Schreib über die Main Funktion:
>
> extern BOOL zustand;

Nope.
Schreib ins unter.h
Denn dort gehört diese Deklaration hin, wenn die Variable zustand zu 
unter.c gehört.

von Rolf M. (rmagnus)


Lesenswert?

Das ist mal wieder ein perfektes Beispiel dafür, wie man so eine Frage 
nicht stellt. Der maßgebliche Teil des Codes, nämlich unter.h bzw. die 
Deklaration von zustand fehlt, ebenso wie der Text der Fehlermeldung. 
Davon abgesehen habe ich den Verdacht, daß der oben gezeigte Code nicht 
der ist, bei dem der Fehler aufgetreten ist und in Wirklichkeit nie 
einen Compiler gesehen hat.

Dummschwaetzer schrieb:
> Die Main Funktion ist nicht in unter.c?
>
> Warum sollte der Compiler eine Variable, die in unter.c definiert ist,
> kennen, wenn Du unter.h einbindest?

Warum sollte er sie nicht kennen (unter der Voraussetzung, daß in 
unter.h die korrekte Deklaration der Variablen enthalten ist)?

> Schreib über die Main Funktion:
>
> extern BOOL zustand;

Das gehört in unter.h. Außerdem schreibt er:

uc_SD schrieb:
> Wenn ich die Variable direkt über der int main(void) deklariere kommt es
> ebenso zu einem Compilerfehler.

Die Frage ist, WELCHER Compilerfehler, und WIE sieht die Deklaration 
aus?
Außerdem ist noch interessant, wo BOOL und FALSE herkommen, welcher 
Compiler benutzt wird und wie er aufgerufen wird. Hinweis: Die 
Reihenfolge, in der man linkt, kann wichtig sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.