hi, welchen wert hat eine Variable, wenn ich si initialisiere? 0?1?oder einen zufallswert?
42. Im Ernst: den Wert, den der initializer ihr gegeben hat, welchen sonst? Für bessere Auskünfte müsstest du aber etwas mehr von deinem Code zeigen.
1. Initialisierte Variablen haben den initialisierten Wert. 2. Nicht initialisierte globale und statische Variablen haben den Wert 0. 3. Initialisierte Arrays haben die initialisierten Werte. 4. Bei unvollständig initialisierten Arrays haben die restlichen Elemente den Wert 0. 5. Uninitialisierte lokale Variablen sind uninitialisiert. 6. IO-Register haben den Resetwert. Peter
ich meine natürlich deklariert! wenn ich jetzt nur schreibe: int a; welchen wert hat sie dann?
Marco wrote: > int a; > > welchen wert hat sie dann? Siehe Peter: 0, falls es sich um eine globale oder statische Variable handelt, irgendeinen Wert, falls es sich um eine automatische Variable handelt.
>ich meine natürlich deklariert! >wenn ich jetzt nur schreibe: >int a; >welchen wert hat sie dann? Im Zweifelsfall 0. Ist doch aber völlig Wurscht. Wenn du nicht sicher bist gib ihr einen Wert: a=0; Warum lange rumrätseln ? Eine Zeile und Thema erledigt.
Wenn das alles ist, was in deiner Quellcodedatei steht, ist a global und wird mit 0 initialisiert. Steht vor dieser Zeile aber bspw. void f(void) { dann ist a eine automatische Variable (lokal und nicht statisch) und hat deswegen einen undefinierten Anfangswert. Wenn er erste Zugriff auf a lesend ist, wird der Compiler wahrscheinlich "'a' might be used uninitialized" oder so ähnlich anzeigen, wenn die entsprechende Warnung und die Optimierung aktiviert sind.
holger wrote: > Wenn du nicht sicher bist gib ihr einen Wert: Kein guter Ratschlag. Ich habe schon mehr als einen Fall gesehen, wo eine derartige ,,wir initialisieren hier mal immer alles''- Gewohnheit Bugs maskiert hat, die andernfalls durch besagte Compilerwarnung entdeckt worden wären. Aus diesem Grunde bin ich mittlerweile selbst in coding guidelines dafür, dass Variablen nur bei nachgewiesener Notwendigkeit initialisiert werden sollten. Als Notwendigkeit zählt dabei nicht das Auftreten der Warnung, zumindest nicht, bis analysiert worden ist, ob der Fehler im Code liegt oder der Compiler nur die (dann vermutlich nicht ganz triviale) Logik der Zuweisungen nicht durchschaut. (Sowas kann einem gelegentlich bei state machines begegnen.) Beispiel für einen auf diese Weise maskierten Bug: https://savannah.nongnu.org/bugs/index.php?21076
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.