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


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.