www.mikrocontroller.net

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


Autor: Dirk A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: zu faul zum anmelden (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.