mikrocontroller.net

Forum: Compiler & IDEs Funktion als GLOBAL deklarieren?


Autor: FrageMan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es in C das Schlüsselwort "GLOBAL", wenn man Funktionen global 
deklarieren möchte? Ich habe nähmlich ein Programmbeispiel, wo die 
Funktionen so deklariert sind. Aber mein Compiler meldet 
Fehlermeldung... als ob er diesen Schlüsselwort nicht kennt?!

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es heißt extern nicht global.

extern typ funktion(parameter);

PS: Wer Name und nämlich mit h schreibt...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktionen sind in der quelle immer global, oder meist du über mehre 
quelldateien.

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also nochmal etwas genauer, Variablen in C die nicht in einer 
Unterfunktion definiert sind, sind immer global.
Um sie allerdings in einer anderen Quelltextdatei zu nutzen musst du sie 
dort mit extern nochmals "definieren".

main.c:

int beispiel;


weitere_datei.c:

extern int beispiel;

Autor: FrageMan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim T. wrote:

> Um sie allerdings in einer anderen Quelltextdatei zu nutzen musst du sie
> dort mit extern nochmals "definieren".

Genauer gesagt, spricht man in diesem Falle von "deklarieren".

Unter "Definieren" versteht man in C die Stelle, an der die
tatsächliche Implementierung dann steht.

Also ist
int beispiel;

eine Definition (die, falls ihr keine andere Deklaration voran gegangen
ist, zugleich eine Deklaration sein kann), aber
extern int beispiel;

ist immer eine Deklaration.  Die Definition reserviert in diesem
Falle den Speicher, die Deklaration macht nur den Namen (und den
Datentyp) dem Compiler bekannt.

Bei Funktionen kann man das "extern" auch weglassen, da
int beispiel(void);

auf Grund der fehlenden anschließenden Implementierung eindeutig
als Deklaration erkennbar ist.  Das ist damit vollständig äquivalent
zu
extern int beispiel(void);

Die Definition wäre hier:
int beispiel(void)
{
   return 42;
}

Auch hier wiederum: geht der Definition keine gesonderte Deklaration
voraus, dann ist die Definition zugleich Deklaration (für den Rest
der gegenwärtigen Übersetzungseinheit).

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Tim T. wrote:
>
>> Um sie allerdings in einer anderen Quelltextdatei zu nutzen musst du sie
>> dort mit extern nochmals "definieren".
>
> Genauer gesagt, spricht man in diesem Falle von "deklarieren".

Nicht nur genauer gesagt, sondern ausschließlich.
Ich hab einfach deklaration und definition begrifflich verdreht.

Das Beispiel war auch etwas blöde gewählt da bei int beispiel, wie von 
dir beschrieben definition und deklaration zusammen fallen; verdammte 
Variablen.

Und beim Rest deiner Ausführungen konnte ich auch locker zustimmend 
nicken bis auf:
> Bei Funktionen kann man das "extern" auch weglassen, da
>
>
int beispiel(void);
Sobald der Quelltext mal was länger ist, oder schon was älter ist man 
froh wenn man solche Gedächtnisstützen hat!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.