Hallo! Ich habe gerade eine Linked List geschrieben, die mir Kopfzerbrechen bereitet. die liste: ------------------------------------------------------------- typedef struct DISP_MESSAGE disp_message; struct DISP_MESSAGE { uint8_t type; uint8_t len; uint8_t data[128]; disp_message* next; }; -------------------------------------------------------------- und der pointer dazu: disp_message* DispMessageSendBuffer; Nun versuche ich darauf zuzugreifen: if((*DispMessageSendBuffer).type == DISP_CMD) der compiler (µVision4) gibt mir bei dieser zeile folgende fehlermeldung aus: Programm\display.c(151): error: #18: expected a ")" Könnt ihr mir sagen ob ich etwas übersehe/etwas ich falsch mache? Laut meinen C-Kenntnissen sollte sich das problemlos kompilieren lassen... Target ist CortexM3 ( STM32F103 ) Grüße, Erik
:
Verschoben durch Admin
typedef struct DISP_MESSAGE { uint8_t type; uint8_t len; uint8_t data[128]; struct DISP_MESSAGE *next; }disp_message; Versuchs mal damit. typedef und struct sind hier nur der Bequemlichkeit halber zusammengezogen.
Hallo nochmal! Die idee hatte ich auch schon;) Fehler bleibt allerdings der selbe. Gruß, Erik
Was genau ist DISP_CMD? Hat schon Leute gegeben mit #define DISP_CMD 10; oder so. Das (*p).a geht auch eleganter als p->a
Hallo! Stimmt, an die andere Seite des Vergleichs hatte ich gar nicht gedacht. Daran lag es auch -> #define DISP_CMD 0x11, da hat sich ein komma eingeschlichen gehabt. Vielen Dank! gruß, erik
Ich hab die Fragmente mal zusammenkopiert, bisschen Gluecode drumrum, und es kompiliert astrein (mit Visual Studio 2008). Würde sagen, der Fehler steckt in den Zeilen, die du noch nicht gezeigt hast. Was steht knapp oberhalb von dieser Zeile? > if((*DispMessageSendBuffer).type == DISP_CMD) Und wie ist DISP_CMD definiert? erik schrieb: > if((*DispMessageSendBuffer).type == DISP_CMD) Die Syntax ist nicht falsch, aber ungewöhnlich. Gebräuchlicher ist das hier: if(DispMessageSendBuffer->type == DISP_CMD)
Für genau solche Fälle haben Compiler eine Option, sich den Output vom Präprozessor ansehen zu können. Da springt das dann ins Auge.
Eclipse hat auch eine Option, nennt sich Macro Expansion, welche einem das "Resultat" anzeigt, ist recht nützlich.
Hallo nochmals! Kann mir jemand sagen, wo ich den Präprozessor Output bei µVision finde? Ich habe ihn selbst nicht gefunden:( Grüße, Erik
erik schrieb: > Hallo nochmals! > > Kann mir jemand sagen, wo ich den Präprozessor Output bei µVision finde? > Ich habe ihn selbst nicht gefunden:( > > Grüße, Erik Bei der 3er war's unter Project -> Options for Target -> Listing
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.