Forum: PC-Programmierung Linked List - nicht kompilierbar


von erik (Gast)


Lesenswert?

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
von Finsbury (Gast)


Lesenswert?

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.

von erik (Gast)


Lesenswert?

Hallo nochmal!

Die idee hatte ich auch schon;) Fehler bleibt allerdings der selbe.

Gruß, Erik

von (prx) A. K. (prx)


Lesenswert?

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

von erik (Gast)


Lesenswert?

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

von willibald (Gast)


Lesenswert?

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)

von willibald (Gast)


Lesenswert?

ok, zu spät ...

von (prx) A. K. (prx)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Eclipse hat auch eine Option, nennt sich Macro Expansion, welche einem 
das "Resultat" anzeigt, ist recht nützlich.

von erik (Gast)


Lesenswert?

Hallo nochmals!

Kann mir jemand sagen, wo ich den Präprozessor Output bei µVision finde? 
Ich habe ihn selbst nicht gefunden:(

Grüße, Erik

von Arc N. (arc)


Lesenswert?

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
Noch kein Account? Hier anmelden.