Forum: Compiler & IDEs Wert der Variable nach Initialisieren


von Marco (Gast)


Lesenswert?

hi,
welchen wert hat eine Variable, wenn ich si initialisiere? 0?1?oder 
einen zufallswert?

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


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Marco (Gast)


Lesenswert?

ich meine natürlich deklariert!

wenn ich jetzt nur schreibe:

int a;

welchen wert hat sie dann?

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


Lesenswert?

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.

von holger (Gast)


Lesenswert?

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

von yalu (Gast)


Lesenswert?

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.

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


Lesenswert?

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
Noch kein Account? Hier anmelden.