Variable nicht zerstören



  • Hallo,
    wenn ich in einer Funktion eine Variable erstelle wird sie nach dem beenden der Funktion zerstört. Wie verhindere ich das?

    LG



  • Indem du weiter in deinem Buch blätterst, bis du über die Kapitel "Funktionen", Abschnitte "Parameter" und "Rückgabewerte", und "Zeiger", Abschnitt "Call-By-Reference", stößt. Da wird das dann genauer erklärt.



  • Alternative: Mach die Variable static. Hab ich, aber glaube ich nie gebraucht und würde ich als schlechten Stil bezeichnen.



  • static Variablen können dir um die Ohren fliegen, wenn mehrere Threads die gleiche Funktion aufrufen. Und das Feld streckt sich von "Hm, dieser Wert sollte eigentlich etwas anderes sein, als ich erwartet habe" bis "das Programm stürzt kaum reproduzierbar ab".

    Gab mal eine Zeit, wo Programmierer darauf geschissen haben. Dann haben sie gemerkt, dass localtime , readdir und noch andere Funktionen nicht threadingsicher sind. Dann hat man in aller Eile nichtportable Lösungen für das Problem entwickelt. Die sind zwar reentrant, aber halt nicht überall so vorhanden. Auf Windows heißt das dann z.B. localtime_s , bei POSIX localtime_r . Und die Parameterreihenfolge ist auch eine andere. readdir_r ist noch kaputter, weil du da genug Speicher für den Pfad selbst reservieren musst und um die maximale Pfadgröße zu bekommen wieder einen Call machen musst ... der natürlich nicht threadingsicher ist. Oder haben die das absichtlich gemacht, damit man die Größe einmal beim Programmstart holt? Dann wäre das CRT ja fast intelligent.

    Und mktime haben sie natürlich vergessen. 😡 Deswegen lässt du besser so einen Müll mit statischen Variablen. Meine Funktionen sind eigentlich immer so gestaltet, dass bei einfachen Funktionen nur 0 (Fehler) oder 1 (Erfolg) oder ein Fehlercode (0==Erfolg, alles andere==Fehlercode) zurückgibt, und den Rest mache ich über Parameter. Funktioniert auch ganz gut.



  • Neeyne schrieb:

    Hallo,
    wenn ich in einer Funktion eine Variable erstelle wird sie nach dem beenden der Funktion zerstört. Wie verhindere ich das?

    Das kann man nicht verhindern, das ist so in C!
    Ausnahme: static - Variablen, siehe die anderen Kommentare.


Log in to reply