Forum: Mikrocontroller und Digitale Elektronik C Fehler: Vergleich von Const mit bool immer falsch


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von DraconiX (Gast)


Lesenswert?

Ich habe hier einen kleinen Denkfehler oder irgendwas passt nicht:

1
#define SSD1306_LCDWIDTH    128
2
#define SSD1306_LCDHEIGHT   64
3
4
//...
5
6
7
void drawRect(uint8_t px1, uint8_t py1, uint8_t px2, uint8_t py2)
8
{
9
    if( ((px1 || px2) > SSD1306_LCDWIDTH-1) ||
10
        ((py1 || py2) > SSD1306_LCDHEIGHT-1) ) return;
11
//....
12
}

Wirft mir immer folgende Warnung aus:
1
warning: comparison of constant '127' with boolean expression is always false [-Wbool-compare]

Woran kann das liegen? Auch wenn ich die Werte direkt eintrage kommt 
diese Warnung.

von Pete K. (pete77)


Lesenswert?

Weil (px1 || px2) ein boolescher Ausdruck ist.

Du willst:
if (px1 > (SSD1306_LCDWIDTH-1)) || (px2 > (SSD1306_LCDWIDTH-1)) || ...

: Bearbeitet durch User
von guest (Gast)


Lesenswert?

"false > 127" ist immer false, und "true > 127" ist auch immer false, 
ergo der ganze Ausdruck ist immer false, steht doch aber auch genau so 
in der Compilermeldung.

von Tobi (Gast)


Lesenswert?

(px1 || px2) liefert nur true oder false.
Wenn px1 0 ist und px2 0 ist kommt false raus ansonsten kommt immer 
true.
Versuch mal
[c]
void drawRect(uint8_t px1, uint8_t py1, uint8_t px2, uint8_t py2)
{
    if( (px1 > SSD1306_LCDWIDTH-1) ||
         (px2 > SSD1306_LCDWIDTH-1) ||
         (py1 > SSD1306_LCDHEIGHT-1)||
         (py2 > SSD1306_LCDHEIGHT-1) ) return;
//....
}
[\c]

von DraconiX (Gast)


Lesenswert?

Ah super! Okay vielen Danke euch - ja logisch, ist ja schon ein 
Vergleich vor dem Vergleich.

:-D

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.