Forum: Mikrocontroller und Digitale Elektronik Warnung, may be used uninitialized in this function


von Dirk A. (Gast)


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

von Flo (Gast)


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 :-)

von zu faul zum anmelden (Gast)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


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.

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.