mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik const array in header auslagern


Autor: tl_0xFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi leute,

ich habe nen PIC32 uC und möchte ein constant int array mit einigen 
tausend Werten in eine header datei auslagern.

mein quelltext sieht wie folgt aus:

#ifndef _KONSTANTEN_H
#define _KONSTANTEN_H

// Testarray
const int constant_array[10] = {0,1,2,3,4,5,6,7,8,9};

#endif

die entsprechende header datei binde ich über #include in der main.c 
ein, der compiler gibt jedoch diese fehlermeldung aus:

Konstanten.h: No such file or directory

kennt jemand den grund dafür?

danke und grüße

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Konstanten.h: No such file or directory
eventuell das die Datei nicht gefunden/geöffnet werden kann. 
Gross/Kleinschreibung, Path, schreibfehler?

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anführungszeichen statt <> benutzen?

Autor: tl_0xFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aah, jo klar. blöder fehler. jetzt kommt noch die meldung

Konstanten.h:16:9: warning: no newline at end of file

also das bezieht sich wieder auf die header datei.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DEFINITIONEN GEHÖREN NICHT IN EINEN HEADER.
Die gehören in eine C-Datei, in den Header gehört lediglich die 
Deklaration (mit 'extern').

> Konstanten.h:16:9: warning: no newline at end of file
Da kommst du nie drauf, was das bedeutet...

Autor: tl_0xFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab es!

es muss noch ne neue zeile am ende des headers eingefügt werden.

trotzdem danke für die schnelle antwort.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viel Spaß, wenn du den Header in zwei verschiedenen Übersetzerläufen 
benutzt.

Ich greife mal vor: 'multiple declaration of constant_array'...

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> DEFINITIONEN GEHÖREN NICHT IN EINEN HEADER.
> Die gehören in eine C-Datei, in den Header gehört lediglich die
> Deklaration (mit 'extern').

Meiner Meinung nach gehören die sehr wohl da hin, oder wo kommen Deine 
"#defines" häufiger vor?

> Viel Spaß, wenn du den Header in zwei verschiedenen Übersetzerläufen
> benutzt.

Das Problem verhindert ja das #ifndef ....

Grüße,
Michael

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael K. schrieb:
>> DEFINITIONEN GEHÖREN NICHT IN EINEN HEADER.
>> Die gehören in eine C-Datei, in den Header gehört lediglich die
>> Deklaration (mit 'extern').
>
> Meiner Meinung nach gehören die sehr wohl da hin, oder wo kommen Deine
> "#defines" häufiger vor?
Ich hab mich hier an K&R, dt. Übersetzung gehalten.
Definition: Vereinbarung, die Speicherplatz belegt.
Deklaration: Vereinbarung, die keinen Speicherplatz belegt (typedef, 
struct und so weiter).

#define ist (bei mir) nichts von beiden, es ist primitiver Textersatz 
durch den Präprozessor.


>> Viel Spaß, wenn du den Header in zwei verschiedenen Übersetzerläufen
>> benutzt.
>
> Das Problem verhindert ja das #ifndef ....
Nein, tut es leider nicht. Wenn du zwei C-Dateien nacheinander 
übersetzt, die beide diese Headerdatei einbinden, wird der Linker sich 
in jedem Fall beschweren.

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Michael K. schrieb:
>>> DEFINITIONEN GEHÖREN NICHT IN EINEN HEADER.
>>> Die gehören in eine C-Datei, in den Header gehört lediglich die
>>> Deklaration (mit 'extern').
>>
>> Meiner Meinung nach gehören die sehr wohl da hin, oder wo kommen Deine
>> "#defines" häufiger vor?
> Ich hab mich hier an K&R, dt. Übersetzung gehalten.
> Definition: Vereinbarung, die Speicherplatz belegt.
> Deklaration: Vereinbarung, die keinen Speicherplatz belegt (typedef,
> struct und so weiter).

ok, da stimme ich mit überein.

>
> #define ist (bei mir) nichts von beiden, es ist primitiver Textersatz
> durch den Präprozessor.
>
>
>>> Viel Spaß, wenn du den Header in zwei verschiedenen Übersetzerläufen
>>> benutzt.
>>
>> Das Problem verhindert ja das #ifndef ....
> Nein, tut es leider nicht. Wenn du zwei C-Dateien nacheinander
> übersetzt, die beide diese Headerdatei einbinden, wird der Linker sich
> in jedem Fall beschweren.

stimmt ... Punkt für Dich ...

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.