Forum: Compiler & IDEs warning: value computed is not used


von Timo P. (latissimo)


Lesenswert?

warum bekomme ich diese warning? Ich nutze sowohl cnt(nämlich in der 
Schleife) als auch data(nämlich den Inhalt des Buffers)


1
void uart_put_frame(char cnt,char *data )
2
{
3
  for(char i = 0; i<cnt;i++)
4
  {
5
    uart_putc(*data);
6
    *data++;
7
  }
8
  return;
9
}

von Timmo H. (masterfx)


Lesenswert?

Wenn ich das richtig verstehe was du da machen willst, dann müsstest du
1
    *data++;
in
1
    data++;
ändern. Denn du willst ja nicht den Inhalt des Buffers inkrementieren 
sondern die Postion, oder? Es ist also eigentlich nur der "*"-Operator, 
der hier überflüssig ist, weil er einfach ungenutzt bleibt.

Es ist gleichwertig mit dieser Schreibweise:
    *(data++);
nicht aber mit dieser:
    (*data)++;

Also wenn du schreibst *data++ dann ist es genauso unsinnig wie
1
  3;

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Timo P. schrieb:
> *data++;

Hier pfuscht Dir die Operatorenrangfolge dazwischen.

So, wie Du es geschrieben hast, macht das

  (*data)++;

und nicht

  *(data++);

Also bestimmst Du den Wert an der Adresse data und erhöhst ihn um 
eins, statt die Adresse zu erhöhen.

von Timo P. (latissimo)


Lesenswert?

Timmo H. schrieb:
> Also wenn du schreibst *data++ dann ist es genauso unsinnig wie
>
1
>   3;
2
>

wenn ich *data++ schreibe ist das doch

1*data++ was der compiler dann zu data++ optimiert oder?

Fehler ist auf jeden Fall erkannt.

von J.-u. G. (juwe)


Lesenswert?

Timo P. schrieb:
> wenn ich *data++ schreibe ist das doch
>
> 1*data++ was der compiler dann zu data++ optimiert oder?

Was bitteschön soll denn "1*data++" sein?

Timo P. schrieb:
> Fehler ist auf jeden Fall erkannt.

Tut mir leid, aber das bezweifle ich. Ich habe den Eindruck, dass Du 
Pointerarithmetik und Multiplikation durcheinanderbringst.

von Serieller (Gast)


Lesenswert?

1
// UART Ausgabe von max. 256 Zeichen (cnt) aus einem Puffer (data)
2
void uart_put_frame(const uint8_t cnt, const char *data)
3
{
4
  for (uint8_t i = 0; i < cnt; i++) {
5
    uart_putc( data[i] );
6
  }
7
}

von Juergen (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Timo P. schrieb:
>> *data++;

> und nicht
>
>   *(data++);

Doch, Postfix-Operatoren binden stärker als Prefix-Operatoren.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Juergen schrieb:

> Doch, Postfix-Operatoren binden stärker als Prefix-Operatoren.

Genauer: diese Operatoren sind rechtassoziativ.  Stärker binden
würden jedoch () [] -> ., denn diese haben die höchste Priorität.

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.