Forum: Compiler & IDEs Compilerwarning comparison is always true. Warum?


von Christian Schreiber (Gast)


Lesenswert?

Hallo,

ich habe diese Funktion
bool set_pwm_rate(struct luefter *l, int percent_output){
  if(l->pwmrate >= 0 && l->pwmrate <= 100){
    OCR1A = (uint16_t) percent_output / 100.0 * 255.0;
    OCR1B = (uint16_t) percent_output / 100.0 * 255.0;
    l->pwmrate = percent_output;
    return(true);
  } else {
  return(false);
  };
}

und folgendem Funktionsaufruf aus einem anderen Sourcemodul:
set_pwm_rate((struct luefter *) &luefter1,luefter1.pwmrate+1);

der Compiler liefert mir folgende Warnung:
../pwm.c:13: warning: comparison is always true due to limited range of 
data type
damit ist if(l->pwmrate >= 0 && l->pwmrate <= 100) gemeint.

Ich werd daraus nicht ganz schlau. Kann mir das vielleicht jemand 
erläutern?
Christian

von Selma (Gast)


Lesenswert?

Wenn l->pwmrate ein "unsigned int" ist, dann ist der nunmal immer >= 0.

von Christian Schreiber (Gast)


Lesenswert?

Achso
also bezieht sich das nur auf den ersten Teil des Vergleiches?
sehr schön,
Danke
Christian

von Rolf Magnus (Gast)


Lesenswert?

Es sind zwei Vergleiche, und die Meldung bezieht sich auf den ersten 
davon.

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.