C: Variable in header, main und weiterer .c-Datei verwenden

Gast #4608260
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?
#4608294
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.
Gast #4608394
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.
#4608557
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.
#4609422
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"); }

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