mikrocontroller.net

Forum: Compiler & IDEs warning: statement with no effect


Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wundere mich über die Warnung, die der gcc ausgibt:

../main.c:745: warning: statement with no effect

Ich verwende das AVR-Studio 4.12 mit WinAVR. Die Zeilen, die
ange,eckert werden sind folgende:
  int8_t i = 0;    // Laufvariable
  lcd_write (0x80,0);  // DD-Ram Adresse auf Anfang 
->  for (i; i<16; i++)  // erste Zeile
    lcd_write(lcd_text[i], 1);
  lcd_write (0xC0,0);  // DD-RAM-Adresse auf Anfang
->  for (i; i<33; i++)  // zweite Zeile
    lcd_write(lcd_text[i], 1);

Die angemeckerten Zeilen (->) kopieren in der for-Schleife ein array,
das als Buffer dient, ins LCD. Im µC funktioniert es einwandfrei, warum
meckert also der Compiler? Hat jemand eine Idee?

Gruß, Slowflyer

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

Bewertung
0 lesenswert
nicht lesenswert
Du schreibst als Schleifeninitialisierung (erstes Argument von "for")
nur "i". Das ist funktionsfrei. Weglassen.

Und bei der zweiten Schleife überprüfen, ob i wirklich erst bei 16
starten soll ...

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du weglassen, etwa so for(;i<16;i++)?

Ich wollte zusätzliche Zuweisungen einsparen, deshalb beginnt die
zweite Schleife auch bei 16.

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

Bewertung
0 lesenswert
nicht lesenswert
> Wie meinst du weglassen, etwa so for(;i<16;i++)?

Genau so funktioniert das.

Zur Erinnerung:

for (a; b; c) { x; }

ist äquivalent zu:

a;
while (b) {
  x;
  c;
}

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, das hat geholfen, Danke

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher dass Du nicht noch einen zweiten (logischen) Fehler drinn hast?

a.) In der ersten Schleife zählst Du von 0 bis 15 also 16 Durchgänge.
b.) In der zweiten Schleife zählst Du von 16 bis 32, also 17
Durchgänge.

Hat Dein Display wirklich in der ersten Zeile 16 Zeichen und in der
zweiten Zeile ein Zeichen mehr, also 17 Zeichen???

Ich habe da so meine Zweifel...

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das stimmt,

hmm.. in der Tat ein logischer Fehler.

Thx

Autor: Torsten O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der Therad ist zwar schon etwas älter, aber ich habe selbiges Problem. 
Ich ich dachte immer, ich könnte programmieren. Folgende Funktion möchte 
ich in C (WinAVR) in AVR Studio 4 implementieren.

void Initialize()
{
  // Initialize Heaters

  for (unsigned short int index = 0; index++; index < 6)
  {
  }
}

Ich bekomme ebenso die Wanrung "warning: statement with no effect". 
Warum? Kann mir jemand bitte mal auf den Hinterkopf klopfen?

Danke im voraus.



lg Torsten

Autor: Tassilo H. (tassilo_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inkrement und Abbruchbedingung vertauscht

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Torsten Ohne schrieb:
> Hallo,
>
> der Therad ist zwar schon etwas älter, aber ich habe selbiges Problem.
> Ich ich dachte immer, ich könnte programmieren. Folgende Funktion möchte
> ich in C (WinAVR) in AVR Studio 4 implementieren.
>
> void Initialize()
> {
>   // Initialize Heaters
>
>   for (unsigned short int index = 0; index++; index < 6)

Die Reihenfolge der 3 Bestandteile ist

Initialisierung
Wiederholbedingung
Inkrement


Der Vergleich, ob index kleiner 6 ist, hat im Inkrementteil eher wenig 
Sinn.

Autor: Torsten O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach Scheibenhonig,

danke für's Klopfen :) Manchmal sieht man den Wald vor leuter Bäumen 
nicht. Peinlich :(


lg Torsten

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.