Hallo. Wazu sind in den meinsten header dateien die Funktionen mit extern deklariert ? es funktioniert doch auch ohne dieses extern.
Guter Stil. Es ist halt eine Deklaration, die auf etwas verweist, das woanders implementiert ist. Bei Variablendeklarationen muss es streng genommen sogar davor, weil sich die Deklaration von der Definition nur dadurch unterscheiden lässt.
extern / static bedeutet, ob eine Funktion / Variable für alle Objekte oder nur für das aktuelle Objekt zugreifbar sind. Dabei sind Funktionen per default extern, Variablen static. Eine Ausnahme ist der AVR-GCC, bei dem Variablen auch ohne "extern" stillschweigend als extern angenommen werden, wenn sie in mehreren Objekten verwendet werden. Andere Compiler (z.B. Keil C51) legen diese Variablen dann auch separat an, d.h. sie haben völlig unterschiedliche Adressen und Werte. static lokale Variablen (innerhalb einer Funktion) haben eine andere Bedeutung, sie bleiben die ganze Programmlaufzeit erhalten wie globale Variablen. Peter
> Dabei sind Funktionen per default extern, Variablen static. Nein. Variablen sind per default global. > Eine Ausnahme ist der AVR-GCC, bei dem Variablen auch ohne "extern" > stillschweigend als extern angenommen werden, wenn sie in mehreren > Objekten verwendet werden. Sie werden stillschweigend überlagert, d.h. man bekommt keine Mehrfach-Definitions-Fehler gemeldet. Mit -fno-common kann man diese auch haben, wenn man will... > Andere Compiler (z.B. Keil C51) legen diese Variablen dann auch > separat an, d.h. sie haben völlig unterschiedliche Adressen und > Werte. Das wäre allerdings eine Verletzung des Standards. Sowas darf nur passieren, wenn sie explizit als `static' deklariert sind. 6.2.2 Linkages of identifiers ... 3 If the declaration of a file scope identifier for an object or a function contains the storageclass specifier static, the identifier has internal linkage. ... 5 If the declaration of an identifier for a function has no storage-class specifier, its linkage is determined exactly as if it were declared with the storage-class specifier extern. If the declaration of an identifier for an object has file scope and no storage-class specifier, its linkage is external.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.