mikrocontroller.net

Forum: Compiler & IDEs Wert der Variable nach Initialisieren


Autor: Marco (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich meine natürlich deklariert!

wenn ich jetzt nur schreibe:

int a;

welchen wert hat sie dann?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.