Warnung, may be used uninitialized in this function

Gast #1729618
Lesenswert?

Hallo, ich bekomme beim Kompilieren diese Warnung, er kompiliert zwar, 
aber da mein programm nicht funktioniert würde ich gern wissen was das 
genau bedeutet?
../Pr_test.c:265: warning: 'PWM_Wert1' may be used uninitialized in this 
function

so habe ich es definiert:
char PWM_Wert1;

Ausschnitt aus dem Code:

  switch(PWM_Strom_Menu)        // Einstellungen für die PWM treffen
  {
  case 1:                // für weniger als 1000mAh
    PWM_Wert1  =  50;
    if (Ladefunktion_Menu==2)    // anderer PWM_Wert bei Schnellladung
      PWM_Wert1  =  100;
  break;
  case 2:                // für 1000mAh bis 1500mAh
    PWM_Wert1  =  65;
    if (Ladefunktion_Menu==2)    // anderer PWM_Wert bei Schnellladung
      PWM_Wert1  =  130;
  break;
  case 3:                // für 1500mAh bis 2000mAh
    PWM_Wert1  =  80;
    if (Ladefunktion_Menu==2)    // anderer PWM_Wert bei Schnellladung
      PWM_Wert1  =  160;
  break;
  case 4:                // für mehr als 2000mAh
    PWM_Wert1  =  100;
    if (Ladefunktion_Menu==2)    // anderer PWM_Wert bei Schnellladung
      PWM_Wert1  =  200;
  break;
  }
return PWM_Wert1;    // Rückgabewert
Gast #1729624
Lesenswert?

Der sagt dir nur dass wenn dein PWM_Strom_Menu keinen der Fälle 
erwischt, ein undefinierter Wert zurückgegeben wird.
Abhilfe schafft heir ein

default:
    PWM_Wert1 = 0; //oder anderer ungefährlicher Wert

das kommt unten nach dem letzten break in die switch Klammern rein :-)
Persönliche Seite #1730939
Lesenswert?

zu faul zum anmelden schrieb:

> Wenn PWM_Strom_Menu weder 1, 2, 3 noch 4 ist, erhält PWM_Wert1 keinen
> Wert zugewiesen und wäre demnach undefiniert. Das hat der Compiler
> erkannt und gibt die Warnung aus.

Du hast Recht in diesem Fall:

char foo(void)
{
  char PWM_Wert1;
  // Riesenswitch hier...
  return PWM_Wert1;
}

In diesem Fall würde definiert 0 zurückgegeben (solange keine andere 
Funktion PWM_Wert1 angepackt hat).

char PWM_Wert1;
char foo(void)
{
  // Riesenswitch hier...
  return PWM_Wert1;
}

Allerdings würde im 2. Fall IMHO auch keine Warnung geworfen.

Insgesamt ist es dann ein Thema, das man unter Initialisierung von 
lokalen  (keine) und globalen (auf Null) Variablen im C-Manual findet.

So gesehen ist es schade, dass Dirk keinen kompilierfähigen Code sondern 
nur einen Codefetzen gezeigt hat.

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