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
Was bedeutet "geht nicht" und "kann nicht aktivieren" überhaupt konkret?
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.
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.
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.
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?
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?
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.
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.
> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.