Variablen in Headerdatei

Gast #931544
Hi,
ich habe folgendes Problem:
Ich wollte ein Array in einer Headerdatei deklarieren
1
char a []={'a','b','c'};
doch beim Kompilieren kommt die Meldung "test.elf" nicht gefunden.
Kommentiere ich das Array aus, funktioniert alles.
WARUM?

Software: AVR-Studio und WinAVR

Gruß Jens
#931551
Da du keine genaue Fehlermeldung nennst, gehe ich davon aus, dass dein 
Array möglicherweise doppelt vorkommt (1 x in main.c und 1 x in 
header.c, da beide header.h includen).

Mehr kann ich dir ohne Code nicht sagen.

Außerdem pakt man keine Arrays in Header-Dateien! Die gehören in die 
entsprechende C-Datei.

MfG
Marius
#931556
Jens wrote:
> Hi,
> ich habe folgendes Problem:
> Ich wollte ein Array in einer Headerdatei deklarieren
>
1
> char a []={'a','b','c'};
2
>
Damit hast Du es aber nicht nur deklariert sondern auch definiert , 
und definieren darfst bzw. musst Du es in einem Projekt genau ein 
einziges Mal , während deklarieren beliebig oft geht. Damit der 
Compiler Definition und Deklaration einer Variable auseinanderhalten 
kann, muss bei der Deklaration das Schlüsselwort extern verwendet 
werden.

> doch beim Kompilieren kommt die Meldung "test.elf" nicht gefunden.
Das deutet auf den entsprechenden Linker-Fehler hin, der dazu führt, 
dass kein Output erzeugt wird.

Allgemein: Eine Definition einer Variable erzeugt die Variable und 
reserviert Speicherplatz für sie. Eine Deklaration hingegen sagt 
lediglich dem Compiler "Da ist irgendwo anders eine Variable mit dem 
Namen und dem Typ definiert, tu so, als könntest Du sie sehen und 
überlass dem Linker den Rest".

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.