statische Variablen



  • wobei das =0 unnötig ist. static variablen haben am anfang immer 0, wenn sie nicht mit einem anderen wert initialisiert werden.
    🙂



  • fricky schrieb:

    wobei das =0 unnötig ist. static variablen haben am anfang immer 0, wenn sie nicht mit einem anderen wert initialisiert werden.

    Seit welchem C- Standard? Ich habe schon Pferde vor der Apotheke ... Nö, das

    = 0
    

    ist schon OK. Dabei verschenkt man nichts.
    Wesentlicher ist, daß der Inhalt einer static zwar nicht außerhalb sichtbar, aber innerhalb bei der Reentranz erhalten bleibt. Das habe ich noch nie verletzt erlebt.



  • Ich befürchte, das ist Compiler-abhängig.

    Ich initialisiere das (aus Vorsicht) immer. static-Variable behalten ihren
    Wert, ruft man die Funktion dann nochmal auf ... 🙂



  • Scheppertreiber schrieb:

    Ich befürchte, das ist Compiler-abhängig.

    Ja, ist es. Genauer gesagt hängt es davon ab ob der Compiler kaputt ist oder nicht.



  • Die gehen recht selten kaputt 🙂

    Mein Aztek behandelt das halt anders wie der Watcom. Deshalb: sauber programmieren
    und Variable initalisieren - ist auch besser für die Lesbarkeit.



  • Scheppertreiber schrieb:

    Mein Aztek behandelt das halt anders wie der Watcom.

    welcher von beiden setzt uninitialisierte statics nicht automatisch auf 0?
    🙂



  • Weiß ich jetztz nicht. Ist auch egal, ich initialisiere die eh immer *prost*



  • oh man... ok der code wurde zerhackt...über was könnte man sich noch streiten?



  • Scheppertreiber schrieb:

    Ist auch egal

    isses nicht. ich hab schon mal den watcom benutzt und es würde mich echt interessieren, ob er's richtig macht. so richtig vertraut hab' ich ihm nie. das könnte mein misstrauen bestätigen.
    🙂



  • Im Detail habe ich das nie überprüft.

    Ich initialisiere alle Veriablen bevor ich sie verwende, wenn der Optimierer dann
    meint, das sei unnötig kann er das ja rauswerfen. Richtig überprüfen kann man das
    eh nur wenn man einen Assembler-Output des Compilers hat (der Aztek macht das, beim
    Watcom könnte man mal schauen).

    Im Prinzip müßten beide alles was global bzw static außerhalb von Funktionen ist,
    beim Programmstart nullen. static innerhalb Funktionen weiß ich ehrlich gesagt nicht.
    Ich würde mich da auch nie drauf verlassen, daß nach einem Compilerwechsel dann
    nichts anbrennt. Ich definiere ja eine Variable um sie zu verwenden - sie bekommt
    also entweder einen Wert oder wird geändert, dann kann ich sie auch initalisieren.



  • Nach ISO (oder meinetwegen ANSI) Standard müssen alle static Variablen zum Start eines Programms initialisiert werden. Wenn es nicht der Entwickler tut, dann wird es der Compiler automatisch mit 0 initialisieren.
    Und ja, es ist compilerabhängig. Wenn es ein Compiler nicht tut, ist er eben nicht standardkonform... 😉


Anmelden zum Antworten