Frage zur Deklaration "extern"



  • Ich habe im Header eine Struktur definiert und dazu eine Variable extern deklariert:

    typedef struct {
      int   irgendwas
      char  *nochwas
    } spezi_t;
    
    extern spezi_t spezi;
    

    Die Definition erfolgt in der zughörigen c-Datei. So weit, so gut. Nun habe ich festgestellt, dass es auch funktioniert, wenn die Definition in einem ganz anderen c-Modul steht. Der Compiler meckert nicht mal, wenn ich die Funktion in mehreren Module definiere, obwohl dann nur auf eine zugegriffen wird.

    Sollte man dabei bestimmte Regeln beachten?

    Gruß
    Reinhard



  • Sagt dir der Begriff "ODR" etwas? Ein Bezeichner (Variable oder Funktion) darf nur einmal im gesamten Programm definiert werden, sonst beschwert sich der Linker. Aber du darfst ihn beliebig oft deklarieren - damit wird dem Compiler nur gesagt, daß der Name existiert und irgendwo im Programm Platz bereitgestellt wird.

    Und das "extern" sagt dem Compiler, daß du die Variable hier nur deklarierst - das kann also beliebig oft auftauchen - solange du genau eine Übersetzungseinheit hast, in der die zugehörige Definition steht.


Log in to reply