www.mikrocontroller.net

Forum: Compiler & IDEs sizeof mit stringliste ?


Autor: Stefan Seegel (Gast)
Datum:

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

Autor: Werner B. (Gast)
Datum:

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

Autor: Werner B. (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

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

Autor: Stefan Seegel (Gast)
Datum:

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

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.