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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.