Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zmienna zawsze fałszywa?

Ostatnio zmodyfikowano 2021-06-07 18:36
Autor Wiadomość
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){
       ~~~~~~~~~~~~~~~~~^~~
C/C++
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;
   
}
   
}
P-178738
» 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.
P-178739
Temat założony przez niniejszego użytkownika
» 2021-06-07 16:43:34
Funkcja
getLevelPercent

C/C++
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;
}
P-178740
» 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.
P-178742
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)
       ~~~~~~^~~~~~
P-178744
» 2021-06-07 18:22:02
Ten fragment warunku możesz usunąć.
P-178749
Temat założony przez niniejszego użytkownika
» 2021-06-07 18:36:45
Ok, dziękuje, Pozdrawiam.
P-178750
« 1 »
  Strona 1 z 1