Forum: Mikrocontroller und Digitale Elektronik const array in header auslagern


von tl_0xFF (Gast)


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

von Peter (Gast)


Lesenswert?

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

von Andreas K. (derandi)


Lesenswert?

Anführungszeichen statt <> benutzen?

von tl_0xFF (Gast)


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.

von Sven P. (Gast)


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...

von tl_0xFF (Gast)


Lesenswert?

hab es!

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

trotzdem danke für die schnelle antwort.

von Sven P. (Gast)


Lesenswert?

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

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

von Michael K. (mmike)


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

von Sven P. (Gast)


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.

von Michael K. (mmike)


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 ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.