Forum: Compiler & IDEs struct Problem


von Matthias (Gast)


Lesenswert?

Ja etwas code bereitet mir und meine GCC bauchweh
1
 struct DCF77Maschine {
2
   uint8_t Status;
3
   uint8_t dcfbits[59];
4
   uint8_t counter;
5
};
6
  
7
struct DCF77Maschine DCF77Data;
8
DCF77Data->Status = 1;

Fehlermeldung laut compiler
1
Error  1  expected '=', ',', ';', 'asm' or '__attribute__' before '->' token  C:\Users\Matthias\Desktop\AVR Progs\AVRc\GccApplication1\GccApplication1\GccApplication1.c  57  10  GccApplication1

Hab ich was verpasst so greift man doch auf Structs zu oder binge ich 
was durcheinander?

MFG Matthias

von Alexander Hofmann (Gast)


Lesenswert?

DCF77Data.Status = 1;

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Alexander Hofmann schrieb:
> DCF77Data.Status = 1;

Zudem müssen Anweisungen in einer Funktion stehen.

von Matthias (Gast)


Lesenswert?

Was meinst du mit Anweisungen also es gibt ne main loop und isrs.
Und das geht auch alles wenn ich
es auskommentiere.
1
//DCF77Data.Status = 1;

und ob . oder -> ist wurst wirft den gleichen fehler warum sollte das 
auch den compiler jucken bedeutet ja das gleiche

MFG matze

von Karl H. (kbuchegg)


Lesenswert?

Matthias schrieb:

> und ob . oder -> ist wurst wirft den gleichen fehler

Dann hast du noch andere Fehler


> warum sollte das
> auch den compiler jucken bedeutet ja das gleiche

keineswegs.
Oder hast du irgendwo einen Pointer im Spiel?


Das hier
1
struct DCF77Maschine DCF77Data;
ist ein schon ein Struktur-Objekt. Und als solches hat es Member, auf 
die zugegriffen werden kann
1
void foo()
2
{
3
  DCF77Data.Status = 1;
4
}

von Yalu X. (yalu) (Moderator)


Lesenswert?

Matthias schrieb:
> Was meinst du mit Anweisungen also es gibt ne main loop und isrs.

Die Anweisung
1
  DCF77Data.Status = 1;

Und die sollte innerhalb irgendeiner Funktion stehen und nicht 
außerhalb, wie es in deinem Code-Ausschnitt der Fall ist.

> und ob . oder -> ist wurst wirft den gleichen fehler warum sollte das
> auch den compiler jucken bedeutet ja das gleiche

Nein, . und -> sind überhaupt nicht das Gleiche. Es sieht so aus, als ob 
du dein C-Buch ein zweites Mal durchlesen solltest ;-)

von Matthias (Gast)


Lesenswert?

In der tat inerhalb der main rennt ist :)

Du ich habs wärend dem info studium aufgegeben bücher zu lesen wenn man 
jedes semester ne neue sprache einführt

Und der unterschied zwischen . und -> ist mir schon klar aber ich meine 
ansich ist ja das DCF77DATA auch ne adresse bzw Pointer kein wert im 
speicher.
Oder irre ich mich da?


MFG Matze

von Karl H. (kbuchegg)


Lesenswert?

Matthias schrieb:


> Oder irre ich mich da?

Ja.
Du solltest die Bücher lieber lesen ... besser durcharbeiten.

von db8fs (Gast)


Lesenswert?

Der operator->() führt in ANSI-C eine Dereferenzierung durch, der 
Punkt-Operator greift auf Kompositionen direkt zu. Eine gültige 
äquivalente Zuweisung wäre:

&DCF77DATA->Status =1;

Schau dir mal Kernighan / Ritchie's Buch an - besser einmal in guter 
Literatur nachgelesen, als ne reine "geht/geht nicht" Antwort. Das 
dauert zwar länger, hält dafür aber auch länger nach.

von Yalu X. (yalu) (Moderator)


Lesenswert?

db8fs schrieb:
> Eine gültige äquivalente Zuweisung wäre:
> &DCF77DATA->Status =1;

Dann aber mit Klammern:
1
(&DCF77DATA)->Status =1;

von Matthias (Gast)


Lesenswert?

Bei glegenheit :)
Danke für die schnelle hilfe

von Matthias (Gast)


Lesenswert?

1
uint8_t calc_min(volatile uint8_t start,volatile uint8_t stop,volatile struct DCF77Maschine* Data)
2
{
3
  uint8_t Puff = 0;
4
  uint8_t multi = 1;
5
  for(uint8_t c = start;c < stop;c++ )
6
  {
7
    Puff = Puff + (Data->dcfbits[c]*multi);
8
    multi = multi * 2;
9
    if (c == start + 3)
10
    {
11
      multi = 10;
12
    }
13
  }
14
  return Puff;
15
}

Der Unterschied ist mir schon klar :) wie man ja sieht.
Bloß Manchmal sind es halt die kleinichkeiten wie der fall das es nicht 
in der main war

von Dr. Sommer (Gast)


Lesenswert?

Matthias schrieb:
> Du ich habs wärend dem info studium aufgegeben bücher zu lesen wenn man
> jedes semester ne neue sprache einführt
Das ist bei C nicht so geschickt, da das (wie du siehst) einige Fallen 
hat die auch anderer Sprachen mächtiger Programmierer verwirren 
können...

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.