warning: comparisons like X<=Y<=Z do not have their mathematical meaning

OP #1951675
Lesenswert?

Hallo zusammen,

ich habe in meinem Programm eine if- Anweisung die eine Variable auf 
nicht kleiner als überprüfen soll. Nach dem kompilieren bekomme ich 
folgende Warnung

"warning: comparisons like X<=Y<=Z do not have their mathematical 
meaning".

Der Code Ausschnitt sieht wie folgt aus.

"if (! ( (0x01 <= *(data+2)) && (*(data+2) <= 0x7D) ))"

Bedeutet es, dass der Controller die Funktion kleiner bzw größer als 
nicht unterstützt, oder habe ich einen falschen Syntax verwendet?


Vielen Dank im Vorraus!

Gruss

Sebi
Persönliche Seite #1951693
Lesenswert?

Kommt eventuell auch drauf an was für Datentypen das sind, der Compiler 
und der Controller(?)...

Sebastian Z. schrieb:
> Bedeutet es, dass der Controller
Unglaublich aber wahr: Nicht alle benutzen den Controller... eine 
Angabe kann hilfreich sein..


Alles in allem aber auch ein sehr undurchsichtiges Konstrukt, ich würde 
erstmal dies: *(data+2) in eine lokale Variable auslagern, dann spart 
man sich ein paar Klammern und der Ausdruck lässt sich schreiben als:
1
x = *(data+2);
2
if (x > 0 && x < 126) {
3
//Tu was..
4
}
Ist zwar nicht so "cool" wie mit 10 Klammern und Hexwerten dafür sieht 
man auch nach 10 Jahren noch was man damit aussagen wollte...
Moderator (Firma: Titel) Persönliche Seite #1951741
Lesenswert?

Sebastian Z. schrieb:
> Bedeutet es, dass der Controller die Funktion kleiner bzw größer als
> nicht unterstützt, oder habe ich einen falschen Syntax verwendet?
Die Funktion "kleiner als" bzw "größer als" ist keine Funktion, sondern 
ein Operator. Und es ist schnurzegal, ob der Controller den Operator 
unterstützt. Der Compiler muß ihn unterstützen...
Gast #1951777
Lesenswert?

Hallo,

wie oben schon geschrieben worden ist, geht es nicht um das "kleiner 
gleich" an sich, sondern darum, dass 3 Werte auf einmal verglichen 
werden. Der Compiler möchte also nicht "x <= y <= z", sondern "(x <= y) 
&& (y <= z)".

Solche Ausdrücke werden einzeln abgearbeitet. D. h. erst wird "x <= y" 
ausgewertet und das Ergebnis (Wahr od. Falsch) dann mit "z" verglichen. 
Und ein Ausdruck wie "Wahr <= z" entspricht nicht der mathematischen 
Idee von "y <= z".



Carsten
#3499816
Lesenswert?

guest schrieb:
> Das ist wirklich schön für dich..
>
> Vielleicht ein paar Details dazu. Was war den die Lösung?

Wer lesen kann ist klar im Vorteil!

Carsten schrieb:
> Hallo,
>
> wie oben schon geschrieben worden ist, geht es nicht um das "kleiner
> gleich" an sich, sondern darum, dass 3 Werte auf einmal verglichen
> werden. Der Compiler möchte also nicht "x <= y <= z", sondern "(x <= y)
> && (y <= z)".
>
> Solche Ausdrücke werden einzeln abgearbeitet. D. h. erst wird "x <= y"
> ausgewertet und das Ergebnis (Wahr od. Falsch) dann mit "z" verglichen.
> Und ein Ausdruck wie "Wahr <= z" entspricht nicht der mathematischen
> Idee von "y <= z".
>
> Carsten

PS: Ja ich weiß wie alt der hier ist, hatt es aber gerade offen und 
konnte es nicht lassen ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren