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

Gast #4608260
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?
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
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)
Gast
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.
Gast
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
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.
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.