static bei funktionen



  • Hallo zusammen,

    mal ne frage, was bedeutet das?

    also:

    static void foo(void)
    {
           ...
           ...
    }
    

    was macht static dabei, welchen sinn halt das?

    grüße, Con@n



  • was macht static dabei, welchen sinn halt das?

    Die Deklaration mit static sorgt dafür, dass die so deklariert Funktion internal statt external linkage hat. Für eine Funktion mit internal Linkage wird kein externen referenzierbarer Name generiert, so dass eine solche Funktion nur in der Übersetzungseinheit sichtabr ist (und damit aufgerufen werden kann), in der sie deklariert ist.
    Außerdem kann eine solche Funktion einmal pro Übersetzungseinheit statt einmal pro Programm definiert werden. Sprich: Du kannst in zehn verschiedenen Übersetzungseinheiten zehn verschiedene Funktionen namens foo haben solange foo jeweils static deklariert ist.



  • im klartext heißt das: die funktion ist nur in der quelltext-datei sichtbar, in der sie definiert ist. du kannst sie dann nicht von einer anderen quelltext-datei aus aufrufen.

    das geht übrigens auch mit globalen variablen:

    static int var;
    

    wenn du eine eigene programmbibliothek schreiben willst, kannst du static benutzen, um funktionen und globale variablen zu verstecken, die nur innerhalb der bibliothek benötigt werden. deine bibliothek wird dadurch für den anwender übersichtlicher und du verringerst die gefahr von namenskollisionen.



  • Wobei man static im Namensraum allerdings nicht mehr benutzen sollte. Dafür gibts unnamed namespaces.



  • In C gibts keine Namespaces.



  • Aha, das ist sehr interessant, ich hab mir nämlich mal den Appweb angeschaut, und da wird static exzessiv benutzt.

    dann danke für die Info.



  • SG1 schrieb:

    In C gibts keine Namespaces.

    Ups, sry. 🙂


Anmelden zum Antworten