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?!
Es heißt extern nicht global. extern typ funktion(parameter); PS: Wer Name und nämlich mit h schreibt...
Funktionen sind in der quelle immer global, oder meist du über mehre quelldateien.
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;
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
1 | int beispiel; |
eine Definition (die, falls ihr keine andere Deklaration voran gegangen ist, zugleich eine Deklaration sein kann), aber
1 | 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
1 | int beispiel(void); |
auf Grund der fehlenden anschließenden Implementierung eindeutig als Deklaration erkennbar ist. Das ist damit vollständig äquivalent zu
1 | extern int beispiel(void); |
Die Definition wäre hier:
1 | int beispiel(void) |
2 | {
|
3 | return 42; |
4 | }
|
Auch hier wiederum: geht der Definition keine gesonderte Deklaration voraus, dann ist die Definition zugleich Deklaration (für den Rest der gegenwärtigen Übersetzungseinheit).
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 > >
1 | 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!
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.