Hin und wieder Warnung vom Kompiler

Tyg3r

Erfahrenes Mitglied
Hi,

ich Erhalte hin und wieder (sporadisch beim Kompilieren) folgende Warnung:
"comparison is always false due to limited range of data type"

Der Code welcher das verursacht (betreffende Zeile ist mit //**** makiert):
Code:
inline static std::string rin (char replace = '*'){
        std::string input;
        char tmp = '\0';
        while(tmp != '\r'){
            tmp = getch();
            if(tmp == 0 || tmp == 0xE0){ //****
                getch();
                continue;
            }
            if(tmp < 32)
                continue;

            input += tmp;
            std::cout << replace;
        }
        return input;
    }

Kann sich das einer erklären (und wenn möglich mir auch bitte :D ) ?

Vielen Dank!
Gruß tyg3r
 
Der Typ `char' hat einen Wertebereich von -128 bis +127 (siehe limits.h), 0xE0 ist aber 224 dezimal, d.h. groesser als der groesste Wert, den ein char annehmen kann.
Stattdessen solltest du `tmp' als `int' deklarieren, damit sind alle Character Codes (0 bis 255) und der getch() Rueckgabewert -1 (zeigt einen Fehler oder Ende der Eingabe an) gedeckt.

man getch
man limits
 
Das hängt allerdings von der Plattform ab - char kann auch einen Wertebereich von 0 bis 255 haben (siehe den 2ten Link den du gepostet hast ;)).

Dort gibt es CHAR und SCHAR, was fuer `unsigned char' bzw. `signed char' steht.
Bei Datentypen ist nicht die "signedness" platformabhaengig (die ist im
Standard definiert), sondern die Groesse der Datentypen. Ein int z.B. kann 32 Bit
oder auch 64 Bit lang sein, hat aber immer ein Vorzeichen.
 
Dort gibt es CHAR und SCHAR, was fuer `unsigned char' bzw. `signed char' steht.
Bei Datentypen ist nicht die "signedness" platformabhaengig (die ist im
Standard definiert), sondern die Groesse der Datentypen. Ein int z.B. kann 32 Bit
oder auch 64 Bit lang sein, hat aber immer ein Vorzeichen.
Das ist so nicht ganz richtig. char hat hier nämlich eine Sonderstellung - es gibt 3 char Typen: "signed char", "unsigned char" und "char". Wobei der Typ char - je nach Plattform - entweder vorzeichenbehafted ist oder nicht.

Gruß
 
Zurück