Forum: Compiler & IDEs sizeof mit stringliste ?


von Stefan Seegel (Gast)


Lesenswert?

Tach,

ich habe eine "Stringliste" im flash stehen:

const char str_trinken[] PROGMEM = "trinken";
const char str_essen[] PROGMEM = "essen";
const char str_schlafen[] PROGMEM = "schlafen";

PGM_P strl_actions[] PROGMEM = {str_trinken, str_essen, str_schlafen};

Nun möchste ich wissen wieviele Elemente in strl_actions vorhanden sind
und habe dazu geschrieben:

count = sizeof(strl_actions) / sizeof(PGM_P);

Der Compiler motzt aber über das Konstrukt:

eventlist.c:124: error: invalid application of `sizeof' to incomplete
type `({anonymous})'

(gemeint ist das erste sizeof)

Wie krieg ich die Anzahl der Elemente heraus ?

MfG Stefan

von Werner B. (Gast)


Lesenswert?

So gehts, frag mich aber bitte nicht warum ?-)



PROGMEM char str_trinken[] = "trinken";
PROGMEM char str_essen[] = "essen";
PROGMEM char str_schlafen[] = "schlafen";

PGM_P strl_actions[] PROGMEM = { str_trinken, str_essen, str_schlafen
};

const int count PROGMEM = sizeof(strl_actions)/sizeof(PGM_P);

von Werner B. (Gast)


Lesenswert?

ÄÄÄÄÄhh

Dein code geht auch, die zuweisung zu count muss nur die komplette
information über strl_actions haben.

Wenn der compiler nur über ein Headerfile erfährt dass
strl_actions ein array von zeigern ist, weiss ernatürlich nicht wie
groß dann die strl_actions (im c-file) wirklich ist. Das müsste der
linker auflösen, und das kann meines wissens kein einziger linker.

von Chris (Gast)


Lesenswert?

> Das müsste der linker auflösen, und das kann meines wissens kein
> einziger linker.

Er dürfte es auch gar nicht (dem C-Standard nach) (afaik).

von Stefan Seegel (Gast)


Lesenswert?

Danke !!

Jo, jetzt fällts mir wie Schuppen aus den Nasenhaaren.... richtig, die
Liste wurde über ein Headerfile eingebunden, da weis dann der Compiler
natürlich nicht wie groß der Apparat ist, nur der Linker...

Problem gelöst, nochmal Danke,

Stefan

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.