extern Funktionen

#238300
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
Moderator Persönliche Seite #238301
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.