Forum: Mikrocontroller und Digitale Elektronik C: Variable in header, main und weiterer .c-Datei verwenden


von ichbins (Gast)


Lesenswert?

Servus,

ich habe meine main und dazu eine header datei in der ich die Prototypen 
nenne und eine weitere .c Datei in der ich die Funktionen definiere.

Nun muss ich eine Variable in der main und der weiteren .c Datei 
verwenden. Dann muss man diese doch als extern festlegen oder nicht? 
Aber ich welchen Dateien muss ich sie dann deklarieren?

von Rolf M. (rmagnus)


Lesenswert?

ichbins schrieb:
> Aber ich welchen Dateien muss ich sie dann deklarieren?

Auch im Header, genau wie die Funktionen.

von ichbins (Gast)


Lesenswert?

Rolf M. schrieb:
> Auch im Header, genau wie die Funktionen.

Habe sie dort folgendermaßen deklariert und initialisiert:
extern int variable=0;

Dann kommt aber die Meldung:
'extern' variable has an initializer

von Rolf M. (rmagnus)


Lesenswert?

ichbins schrieb:
> Rolf M. schrieb:
>> Auch im Header, genau wie die Funktionen.
>
> Habe sie dort folgendermaßen deklariert und initialisiert:
> extern int variable=0;
>
> Dann kommt aber die Meldung:
> 'extern' variable has an initializer

Die Meldung ist doch eigentlich recht klar. Warum willst du sie dort 
initialisieren, wo du sie deklarierst? Das gehört da nicht hin, 
genausowenig wie da z.B. der Inhalt deiner Funktionen hingehört, sondern 
nur lediglich die Deklaration und sonst nix.

von ichbins (Gast)


Lesenswert?

Und wo gebe ich ihr dann einen Wert? Bevor ich sie irgendwo verwende, 
muss ich sie doch initialisieren?

von Dfwkgf (Gast)


Lesenswert?

main.h:
int var;


main.c:
var = 42;

von Walter (Gast)


Lesenswert?

main.h:
extern int var;


main.c:
int var = 42;

von ichbins (Gast)


Lesenswert?

Walter schrieb:
> main.h:
> extern int var;
>
> main.c:
> int var = 42;

Kann ich sie dann auch in der weiteren .c Datei verwenden oder muss ich 
sie dort auch nochmal deklarieren? (Initialisieren darf ich ja kein 
zweites Mal)

von C Mann (Gast)


Lesenswert?

ichbins schrieb:
> Walter schrieb:
> main.h:
> extern int var;
> main.c:
> int var = 42;
>
> Kann ich sie dann auch in der weiteren .c Datei verwenden oder muss ich
> sie dort auch nochmal deklarieren? (Initialisieren darf ich ja kein
> zweites Mal)

Warum probierst du es nicht einfach? Die Variable ist nach dieser 
Initialisierung global und muss nicht ein weiteres Mal deklariert 
werden.

von Blackbird (Gast)


Lesenswert?

Aber die main.h (mit dem extern int var;) muss per include in die 
anderen C-Files eingebunden werden, wenn man sie dort verwenden möchte.

Blackbird

von Dirk B. (dirkb2)


Lesenswert?

ichbins schrieb:
> Walter schrieb:
>> main.h:
>> extern int var;
>>
>> main.c:
>> int var = 42;
>
> Kann ich sie dann auch in der weiteren .c Datei verwenden oder muss ich
> sie dort auch nochmal deklarieren? (Initialisieren darf ich ja kein
> zweites Mal)

Verwechselst du deklarieren und definieren?

Wenn du main.h in deinen anderen .c-Dateien "includest", dann ist die 
Variable (durch das extern) da auch deklariert.

Definieren darfst du sie nure einmal. Und das in einer .c Datei.

von Rolf M. (rmagnus)


Lesenswert?

ichbins schrieb:
> Und wo gebe ich ihr dann einen Wert? Bevor ich sie irgendwo verwende,
> muss ich sie doch initialisieren?

Na da wo du sie definierst, genauso wie du der Funktion ihren Code 
gibst. Es ist bei beiden genau das Gleiche: Im Header gibst du nur Name 
und Typ bekannt, im C-File ist dann der eigentliche Inhalt.

Header:
1
// Deklarationen
2
extern int var;
3
void func(void);

C-File:
1
// Definition
2
int var = 3;
3
void func(void) { printf("Hello, world\n"); }

: Bearbeitet durch User
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.