Zugriff auf statische Variablen bzw. Funktionen von außen



  • Hallo zusammen,

    ich habe eine Quellcode-Datei, in der statische Variablen und Funktionen deklariert bzw. implementiert sind.

    Nun möchte ich von einer andern Quellcode-Datei aus

    1. Eine der static Variablen verändern.
    2. Eine als static deklarierte Funktion aufrufen.

    Wenn das Schlüsselwort static unter allen Umständen beibehalten werden soll, was für Möglichkeiten habe ich?

    Geht das überhaupt, ohne die Quellcode-Datei zu ändern?
    Ich hatte mir überlegt, in die Quellcode Datei eine kleine Funktion zu schreiben, die die statische Variable verändert. Aber eigentlich will ich keine extra Funktion implementieren. Geht das irgendwie mit Headern die in einen privaten und einen öffentlichen Teil (nicht verwechseln mit private bei C++) eingeteilt sind?
    Bin für Hilfe dankbar...



  • Die statischen Funktionen/Variablen selber gehen nicht an den Linker und sind damit außerhalb ihrer Quelldatei nicht direkt zu erreichen. Aber eventuell kannst du einen Zeiger auf sie herumreichen (das erfordert aber auch Eingriff in die Quellcode-Datei).

    PS: Wozu benötigst du so etwas?



  • Fruchtmixer schrieb:

    ...Wenn das Schlüsselwort static unter allen Umständen beibehalten werden soll...
    ...Aber eigentlich will ich keine extra Funktion implementieren...

    das schliesst sich irgendwie aus. static-variablen sind 'private' für die übersetzungseiheit, also: entweder machst du das 'static' wech, oder implementierst getter/setter funktionen.
    🙂



  • Hey,

    also erstmal danke für die Antworten.
    Zu dem warum: nun es ist so ich habe hier ein Stück Quellcode, und ich soll ein Programm schreiben, dass alle in diesem Stück Code enthaltenen Funktionen mindestens einmal anspricht. Und das eben ohne den Code zu verändern.
    Ich habe mich jetzt dafür entschieden, die Datei einfach ganz oben mit einzubinden (#include "blablabla.c"). Ist für meine Zwecke ausreichend.

    Kann mir jemand sagen, was da genau passiert? In der Zeile, wo ich "#include "blablalba.c" schreibe, wird ja wohl nicht der gesamte enthaltene Code vom Präprozessor eingefügt, oder?

    Würde mich über eine kurze Erläuterung freuen, weil ich nicht 100 %ig verstehe was ich da eigentlich gemacht habe.



  • Fruchtmixer schrieb:

    Kann mir jemand sagen, was da genau passiert? In der Zeile, wo ich "#include "blablalba.c" schreibe, wird ja wohl nicht der gesamte enthaltene Code vom Präprozessor eingefügt, oder?

    doch, das ist aber keine lösung, denn die static-funktionen und -variablen hast du dann doppelt, wenn du die datei nochmal separat kompilierst.
    🙂


Anmelden zum Antworten