Forum: Compiler & IDEs -Wuninitialized geht nicht


von Gibts N. (schneeblau)


Lesenswert?

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

von Stefan E. (sternst)


Lesenswert?

Was bedeutet "geht nicht" und "kann nicht aktivieren" überhaupt konkret?

von Gibts N. (schneeblau)


Lesenswert?

Ich habe uninitialisierte Variablen in meinem Quellcode, trotz der 
gesetzten Flags liefert mir der Compiler aber keine Warnungen sondern 
sagt, es wäre alles io.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Gibts Ne schrieb:
> Ich habe uninitialisierte Variablen in meinem Quellcode,

Globale bzw. statische?

Diese werden immer (implizit) initialisiert, daher bekommst du auch
keine Warnung.

Nur Variablen der Speicherklasse "auto" werden nicht initialisiert,
nur diese werden daher auch gewarnt.

von Gibts N. (schneeblau)


Lesenswert?

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.

von Norbert (Gast)


Lesenswert?

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?

von Gibts N. (schneeblau)


Lesenswert?

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?

von Norbert (Gast)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

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.

von Gibts N. (schneeblau)


Lesenswert?

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.

von der mechatroniker (Gast)


Lesenswert?

> 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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

der mechatroniker schrieb:
> halte zumindest ich persönlich für schlechten Stil.

Es kann auch fehlende echte Wertzuweisungen vertuschen, die man
ansonsten dank -Wuninitialized (oder -Wextra) bekommen würde.

von Gibts N. (schneeblau)


Lesenswert?

Danke trotzdem allen, die mir beim Verständnis geholfen haben:)

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.