mikrocontroller.net

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


Autor: Timo P. (latissimo)
Datum:

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


void uart_put_frame(char cnt,char *data )
{
  for(char i = 0; i<cnt;i++)
  {
    uart_putc(*data);
    *data++;
  }
  return;
}

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das richtig verstehe was du da machen willst, dann müsstest du
    *data++;
in
    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
  3;

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timmo H. schrieb:
> Also wenn du schreibst *data++ dann ist es genauso unsinnig wie
>
>   3;
> 

wenn ich *data++ schreibe ist das doch

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

Fehler ist auf jeden Fall erkannt.

Autor: J.-u. G. (juwe)
Datum:

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

Autor: Serieller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// UART Ausgabe von max. 256 Zeichen (cnt) aus einem Puffer (data)
void uart_put_frame(const uint8_t cnt, const char *data)
{
  for (uint8_t i = 0; i < cnt; i++) {
    uart_putc( data[i] );
  }
}

Autor: Juergen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Timo P. schrieb:
>> *data++;

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

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

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.