Vorteil von static Funktionen?



  • Beim lesen von Code sehe ich oft Funktionen in der Form

    static int func(){}
    

    In meinen Büchern habe ich zu static nur etwas im Zusammenhang mit Variablen gefunden. Aber wo liegt bei einer Funktion der Vorteil von static?



  • static-Funktionen sind nur in ihrer Übersetzungseinheit bekannt.

    MfG SideWinder



  • die funktion ist nur in dem .c-file sichtbar, in dem sie steht. wenn du sie von woanders aufrufen willst, selbst mit 'extern' kriegste 'nen error.



  • Vielen Dank! Also im Prinzip das gleiche Verhalten wie mit globalen static Variablen?

    Könntet ihr mir auch noch ein bis zwei typische Anwendungsgebiete für solche Funktionen nennen? Also worin liegt der Vorteil?

    Brauch man static Funktionen auch noch in C++, wo man ja expliziet mittels private/protected den Zugriff verhindern kann?



  • Den Zugriff kannst du nur bei Methoden von Klassen einstellen nicht bei Funktionen. Also ist das kein Argument gegen static-Funktionen. Trotzdem sehe ich nahezu keinen Einsatzbereich mehr seit es anonyme Namespaces gibt.

    BTW: Wir sind hier im ANSI-C-Forum, nicht im C++-Forum. Hier gibt es weder Klassen, noch Zugriffsmodifizierer noch anonyme Namespaces 😉

    MfG SideWinder



  • bentja schrieb:

    Brauch man static Funktionen auch noch in C++, wo man ja expliziet mittels private/protected den Zugriff verhindern kann?

    eigentlich nicht. man kann die funktion in ne klasse sperren, dann bedarfs es käfigs der übersetzungseinheit nicht.
    aber manchmal (selten) ist es unpassend, etwas in eine klasse zu stopfen, was als freie funktion leben will. und braucht diese funktion eine kleine hilfsfunktion, dann darf die ruhig static sein.



  • aber manchmal (selten) ist es unpassend, etwas in eine klasse zu stopfen, was als freie funktion leben will. und braucht diese funktion eine kleine hilfsfunktion, dann darf die ruhig static sein.

    Was spricht in diesen Fällen gegen anonyme Namespaces?

    MfG SideWinder



  • volkard schrieb:

    bentja schrieb:

    Brauch man static Funktionen auch noch in C++, wo man ja expliziet mittels private/protected den Zugriff verhindern kann?

    eigentlich nicht. man kann die funktion in ne klasse sperren, dann bedarfs es käfigs der übersetzungseinheit nicht.
    aber manchmal (selten) ist es unpassend, etwas in eine klasse zu stopfen, was als freie funktion leben will. und braucht diese funktion eine kleine hilfsfunktion, dann darf die ruhig static sein.

    Also könnte man sagen, wenn ich für eine Funktion z.B. eine kleine Hilfsfunktion brauche, dann mache ich diese static, da sie aus dem Zusammenhang genommen auch keinen Sinn ergibt? Hab ich das in etwa richtig verstanden?

    Vielen Dank euch!



  • SideWinder schrieb:

    Was spricht in diesen Fällen gegen anonyme Namespaces?

    hab keinen unterschied zwischen static und im anonymen namespace gemacht.

    um genau zu sein ist static verpönt und anonyme namespaces sollen genommen werden.



  • bentja schrieb:

    Also könnte man sagen, wenn ich für eine Funktion z.B. eine kleine Hilfsfunktion brauche, dann mache ich diese static, da sie aus dem Zusammenhang genommen auch keinen Sinn ergibt? Hab ich das in etwa richtig verstanden?

    ja.
    ihre deklaration steht in keinem header und eine andere *.cpp könnte sie eh nur aus versehen oder entgegen der dokumentation aufrufen. dann soll sie auch gar nicht von woanders aufrufbar sein.



  • Vielen Dank! 🙂


Anmelden zum Antworten