mikrocontroller.net

Forum: Compiler & IDEs Inkrement auf Pointer liefert Warning


Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Folgender Code bringt mich ins Grübeln...
Die Funktion prüft einen Puffer (uarx[]), der im Interrupt mit 
empfangenen chars befüllt wird, auf zeichenweise Gleichheit mit einem 
übergebenen String (*command).
Wirs ein CR empfangen, wird das flag uarx_done gesetzt und die Funktion 
kommt über die erste if-Abfrage hinaus.
unsigned char chk_for_cmd(const char *command)
{
   volatile unsigned char *uarxp=&uarx[0];

   if(uarx_done)
   {   /* uart rx done - process receivings */
      while(*uarxp == *command)
      {  /* if current characters are identical, *
          * increase to check next character     */
         *uarxp++;
         if(*++command=='\0')
         {  /* next character to compare matches string-end *
             * -> whole command-string detected -> return 1 */
            uarx_done=0;
            uarx_clr();
            return 1;
         }
      }
   }
   /* no return 1 -> command not detected -> return 0 */
   return 0;
}

Das funktioniert auch alles soweit, allerdings nur, wenn ich den 
command-Pointer in der if-Abfrage (if(*++command=='\0')) 
inkrementiere.
Schreibe ich ein einfaches *command++; in die Zeile davor, warnt mich 
der Compiler damit:
warning: value computed is not used.
Und außerdem funktioniert dann auch die Abfrage nicht mehr.

Kann mir das jemand erklären?

Danke, Grüße,
Michael

Autor: Ch D. (chrisu) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wenn dann ohne den Stern: command++; das sollte gehen.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ch D. schrieb:
> wenn dann ohne den Stern: command++; das sollte gehen.

Ja, natürlich! Du meine Güte, das ist mal eine peinliche Anfrage...
Dass das so keinen Sinn ergibt, hab ich um diese Uhrzeit nicht mehr 
gesehen.

Danke!
Michael

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*++command:

ist aber gleichbedeutend mit

command++;

nur dass im ersten Fall der inkrementierte Pointer noch dereferenziert 
wird (und der gelesene Wert weggeschmissen). Sollte also keinen 
Unterschied machen.

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.