Forum: Mikrocontroller und Digitale Elektronik Array extern - Anzahl Elemente mit eingeben oder nicht?


von Fred (Gast)


Lesenswert?

Hi Leute!

Kurze und knappe Frage:

Ich habe in einer c-Datei ein Array
1
const uint8_t array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
Wenn ich dieses Array nun in anderen Dateien verwenden möchte, schreibe 
ich dann in meine h-Datei
1
extern const uint8_t array[10];
oder lasse ich die Elementeanzahl weg
1
extern const array[];
?

Ist eines davon richtig / falsch, oder macht es einen Unterschied? Der 
Compiler sagt bei beiden Varianten garnichts.

Gruß und danke

von Fred (Gast)


Lesenswert?

Kann mir das niemand beantworten? :-/

von Array (Gast)


Lesenswert?

Wenn Du dich mit Arrays beschäftigen würdest, dann könntest du dir die 
Frage selbst beantworten.

Wenn du ein Array anlegst, erhältst du als "Belohnung" die Adresse des 
ersten Eintrags in diesem Array.

Diese Adresse ist für den zukünftigen Zugriff wichtig. In C kannst Du 
die Anzahl der Arrayelemente nicht abfragen. Du musst dir diese separat 
merken.

Der Datentyp ist aber wichtig! Es reicht also ein
1
extern const uint8_t array[];
2
3
oder
4
5
extern const uint8_t *array;

von Stefan E. (sternst)


Lesenswert?

Array schrieb:
> Wenn Du dich mit Arrays beschäftigen würdest,

Was du vielleicht selber auch mal etwas intensiver machen solltest, denn 
was du geschrieben hast, ist größtenteils Unsinn.

Array schrieb:
> In C kannst Du
> die Anzahl der Arrayelemente nicht abfragen.

Doch, kann man. Dazu muss aber bei der Deklaration auch die Größe mit 
angegeben werden.

Array schrieb:
> Es reicht also ein
> extern const uint8_t array[];
>
> oder
>
> extern const uint8_t *array;

Die zweite Variante ist falsch und funktioniert nicht.


Innerhalb einer Funktion, die ein Array als Parameter hat, treffen deine 
Aussagen zu. Darum geht es hier aber nicht.

von MaWin (Gast)


Lesenswert?

Fred schrieb:
> Ist eines davon richtig / falsch, oder macht es einen Unterschied?

Die erste liefert die Grössenangabe mit,
abfragbar per sizeof(array)/sizeof(array[0]),
die zweite nicht.
Wenn dein Arry nicht selbst eine Grössenangabe enthält, beispielsweise 
mit einem 0-Element als letztem Element, dann ist die erste sicher 
schlauer.

von Peter D. (peda)


Lesenswert?

Die Größe mit anzugeben ist besser.
Der Compiler kann dann warnen, wenn man außerhalb der Größe zugreift.

von Fred (Gast)


Lesenswert?

Ich danke euch!

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.