Variablen in einer statischen Funktion auch automatisch statisch????



  • Hallo,

    sind Variablen, welche ich in einer statischen Funktion deklariere auch automatisch statisch??

    static uint8_t MyFunc(..)
    {
      uint8_t var; //Variable auch implizit statisch?
    }
    

    Wenn ich die Funktion mehrmals aufrufe, und die variablen nur in best. stellen änderen, hat diese beim nächsten aufruf noch den alten wert?? kann das sein, oder ist das ein undefiniertes zufalls verhalten??

    Grüße



  • Nein, die Variablen kriegen nicht automatisch statische Speicherdauer. static bedeutet in diesem Fall, dass die Funktion interne Linkage kriegt (also außerhalb der Übersetzungseinheit nicht sichtbar ist).

    Wenn deine uninitialisierten Variablen Werte haben, mit denen du etwas anfangen kannst, ist das reiner Zufall, und du musst darauf vorbereitet sein, dass sich das ohne jede Vorwarnung ändert.



  • static bei Funktionen (und globalen Varaiablen) bezieht sich auf die Sichtbarkeit.

    Diese Funktionen/Variablen sind nur im aktuellen Modul/Quellcode sichtbar/bekannt.

    Wenn du die Funktion mehrmals aufrufst, kann es sein das die lokalen Variablen immer den gleichen Platz auf dem Stack haben.



  • NullBockException schrieb:

    sind Variablen, welche ich in einer statischen Funktion deklariere auch automatisch statisch??

    Nein. Das ergäbe auch keinen Sinn, weil das static in beiden Fällen unterschiedliche Bedeutung hat.



  • DAnke für die Antworten. Ja eben ich dachte das durch die statische funktion, auch die funktion einsprung addresse fix ist, und so die variablen "zufällig" im stack immer ander gleichen stelle im speichern liegen. Gut, dann muss ich die variable zusätzluch statisch machen..



  • Die Einsprungadresse einzelner Funktionen ist generell fest. Das hat nichts damit zu tun, wie hoch der Stack ist, wenn eine Funktion aufgerufen wird.


  • Mod

    NullBockException schrieb:

    DAnke für die Antworten. Ja eben ich dachte das durch die statische funktion, auch die funktion einsprung addresse fix ist, und so die variablen "zufällig" im stack immer ander gleichen stelle im speichern liegen. Gut, dann muss ich die variable zusätzluch statisch machen..

    Das hört sich abenteuerlich an. Was möchtest du überhaupt erreichen?

    Setzt Sprachmittel ( ⚠ besonders nicht so mächtige und oft unverstandene wie static) niemals auf gut Glück ein! Du musst genau verstehen, was du in deinem Programm warum wie machst!

    Hier kommt bestimmt jeden Monat jemand vorbei, der Probleme hat, weil er dachte, static wäre was ganz tolles, von dem man nie genug haben kann (oftmals wollen sie optimieren 🙄 ), ohne dass verstanden wurde, was static überhaupt genau bedeutet. Erschwerend kommt hinzu, dass static seine Bedeutung nach Kontext ändert.


Anmelden zum Antworten