www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variablen in Headerdatei


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe folgendes Problem:
Ich wollte ein Array in einer Headerdatei deklarieren
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

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens wrote:
> Hi,
> ich habe folgendes Problem:
> Ich wollte ein Array in einer Headerdatei deklarieren
>
> char a []={'a','b','c'};
> 
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.