-Wuninitialized geht nicht

OP #3248101
Hallo,

leider kann ich unter raspbian mit codeblocks und gcc 4.6.3 diese 
Warnungen nicht aktivieren.

Meine Suche im inet brachte das Ergebnis, dass man entweder -O oder die 
anderen Optimierungen nutzen muss. Bei mir geht es trotzdem nicht.

Hat jemand einen Hinweis, wie ich ihn doch dazu bewegen kann?

Benutzte Parameter:

-g -ansi -Wall -pedantic -Wuninitialized und eben eine Optmierungsstufe
Gast
Gibts Ne schrieb:
> Das globale automatisch initialisiert werden, hatte ich hier im Forum
> schon gelesen.
>
> Aber lokale Variablen müsste er ja erkennen, also sowohl in Funktionen
> als auch in der main Funktion.
1
void main(void)
2
{
3
    int a;
4
    a++;
5
}

$ gcc -Wall -Wno-main x.c
x.c: In function ‘main’:
x.c:4: warning: ‘a’ is used uninitialized in this function

Ungefähr so?
OP
Hm, vielleicht liegt das Ganze doch an einem Missverständnis.

Prüft der Compiler, ob die Initialisierung am Anfang bei der Deklaration 
erfolgt, oder prüft er nur generell, ob durch irgendwelche Operationen 
vor einer Rechenoperation mit dieser Variable dieser ein Wert zugewiesen 
wurde?

Also kann die eigentliche erste definierte Wertzuweisung viel später 
mitten in der Funktion/im Programm passieren oder auch in fremden 
Funktionen, die ich eingebunden habe und nutze?
Gast
Gibts Ne schrieb:

> Also kann die eigentliche erste definierte Wertzuweisung viel später
> mitten in der Funktion/im Programm passieren

Ja

> oder auch in fremden
> Funktionen, die ich eingebunden habe und nutze?

Erzähl - oder besser zeig - mal wie innerhalb einer 'fremden' Funktion 
B() eine lokale Variable einer Funktion A() initialisiert werden soll.
Gibts Ne schrieb:
> oder auch in fremden
> Funktionen, die ich eingebunden habe und nutze?

Das ginge ja nur über einen Pointer. Da der Compiler hier aber die 
weitere Nutzung der Variable schlecht nachverfolgen kann, wirst du hier 
wohl eine Warnung bekommen. Allerdings vielleicht kein -Wuninitialized, 
sondern ein -Wmaybe-uninitialized.
OP
War nicht so konkret ausgedrückt, ich meine die fremde Funktion schreibt 
z. B. in mein lokales char array, welches in den Parametern der Funktion 
übergeben wird.


Gut damit wäre das geklärt, deswegen wird bei mir kein Warnung 
angezeigt. Ich nutze alle Variablen korrekt und dachte, es hilft 
Variablen grundsätzlich zu initialisieren.

Meine Annahme war, das Variablen grundsätzlich direkt nach ihrer 
Deklaration initialisiert werden müssen/sollen.
Gast
> Meine Annahme war, das Variablen grundsätzlich direkt nach ihrer
> Deklaration initialisiert werden müssen/sollen.

im Gegenteil. Variablen um des Initialisierens willen auf einen nicht 
besonders sinnvollen Dummy-Wert zu initialisieren, um dann hoffentlich 
vor dem Lesen noch den richtigen reinzuschreiben, halte zumindest ich 
persönlich für schlechten Stil.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.