static inline



  • Hi,

    Wieso wird in dem Buch "C von A bis Z" jede inline-Funktion innerhalb der selben .c-Datei als "static" deklariert? Was ist der Grund dafür?

    grüße



  • Liegt wohl daran, daß der Autor unglaublich clever sein will - und sichergehen will, daß seine inline-Funktionen wirklich keine Probleme mit der ODR verurachen. Aber afaik impliziert inline schon, daß der Compiler in der LAge ist, die Funktionsdefinitionen richtig hinzubekommen.

    Suzanne schrieb:

    "C von A bis Z"

    Bonustip: Wirf das Buch weg (oder schenk's Pi, der war neulich auf der Suche nach Anschauungsmaterial :D) und besorg dir ein vernünftiges.


  • Mod

    CStoll schrieb:

    (oder schenk's Pi, der war neulich auf der Suche nach Anschauungsmaterial :D)

    Ich glaube der sucht das C++-Buch, das ist nämlich lustiger. Beim C-Buch sind die Fehler subtiler (aber nicht weniger krass), eher ein Suchspiel als ein Witzebuch.



  • static und inline haben nichts miteinander zu tun.
    inline ist ein Compiler-Hint, d.h. er kann was machen oder es bleiben lassen (weil er es besser weiß) und obendrein kein C89.
    static dagegen ist immer explizit.



  • Heißt das, ich erzwinge mit "static", dass die Funktion als inline-Funktion behandelt wird?

    grüße



  • Nein, wie Wutz schon sagte, haben die beiden Schlüsselworte überhaupt nichts miteinander zu tun.

    "inline" ist eine Empfehlung für den Compiler, die Funktion inline zu definieren (ob er es macht, ist seine Entscheidung). Afaik gab es das neu in C++, ob es in neueren C-Versionen auch erlaubt ist, weiß ich nicht. Wirklich erzwingen kannst du inline-Erweiterung aber nicht.

    "static" gibt an, daß die Funktion nur in der aktuellen Übersetzungseinheit sichtbar ist. Das kann normalerweise für private Hilfsfunktionen verwendet werden, die außerhalb eines Moduls niemanden zu interessieren haben.


Anmelden zum Antworten