Zmienna zawsze fałszywa?
Ostatnio zmodyfikowano 2021-06-07 18:36
Creativess Temat założony przez niniejszego użytkownika |
Zmienna zawsze fałszywa? » 2021-06-07 16:35:53 Witam Mam problem z ostrzeżeniem ktorę wskazuje kompilator, z tego co wywnioskowałem to rozchodzi się o znacznik < który wskazuje na liczby poniżej zera, jednocześnie deklaracja jest unsigned, co wyklucza liczby poniżej zera, jak mogę ominąć to ostrzeżenie? Log: player.cpp:1985:21: warning: comparison is always false due to limited range of data type [-Wtype-limits] if(level_percent < 0){ ~~~~~~~~~~~~~~^~~ player.cpp:1996:24: warning: comparison is always false due to limited range of data type [-Wtype-limits] if(maglevel_percent < 0){ ~~~~~~~~~~~~~~~~~^~~
if( lastSentStats.experience != this->experience || lastSentStats.level != this->level ) { uint64_t licznik = this->experience - this->getExpForLv( level ); uint32_t mianownik = this->getExpForLv( level + 1 ) - this->getExpForLv( level ); level_percent =( uint8_t ) this->getLevelPercent( licznik, mianownik ); if( level_percent < 0 ) { level_percent = 0; } else if( level_percent > 100 ) { level_percent = 100; } } |
|
pekfos |
» 2021-06-07 16:41:18 Zależy co robi getLevelPercent(). Po nazwie wnioskuję, że zwraca wartość z przedziału [0; 100], więc ten dodatkowy kod byłby zbędny. Jeśli jednak może zwrócić wartość poniżej zera, to należałoby to obsłużyć przed rzutowaniem na typ bez znaku. |
|
Creativess Temat założony przez niniejszego użytkownika |
» 2021-06-07 16:43:34 Funkcja getLevelPercent uint32_t Player::getLevelPercent( uint64_t licznik, uint32_t mianownik ) { if( mianownik <= 0x00 ) return 0x00; uint32_t wynik =(( uint32_t )(( double ) licznik / mianownik * 100 ) ); if( wynik < 0x00 || wynik > 0x64 ) return 0x00; return wynik; } |
|
pekfos |
» 2021-06-07 17:12:00 Tu jest wynik powyżej 100 przycięty, chociaż do zera. Oba tamte ify możesz spokojnie wywalić, bo obecnie ich warunki są niemożliwe do spełnienia. |
|
Creativess Temat założony przez niniejszego użytkownika |
» 2021-06-07 17:53:05 Ok, dziękuje za pomoc, po przebudowaniu całego projektu, jednak kompilator wskazał ostrzeżenie: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits] if(wynik < 0x00 || wynik > 0x64) ~~~~~~^~~~~~
|
|
pekfos |
» 2021-06-07 18:22:02 Ten fragment warunku możesz usunąć. |
|
Creativess Temat założony przez niniejszego użytkownika |
» 2021-06-07 18:36:45 Ok, dziękuje, Pozdrawiam. |
|
« 1 » |