Forum: Compiler & IDEs static ausserhalb einer Funktion


von Simon (Gast)


Lesenswert?

Ich dachte immer das ein static innerhalb einer funktion bedeutet das 
die variable zwischen den funktionsaufrufen beibehalten wird.

Nur warum wird hier ausserhalb einer funktion static verwendet?

Zudem gibt es das wort static auch vor einer funktion, was soweit ich 
weisz dann aber bedeutet das diese funktion nur innerhalb der .c datei 
sichtbar ist.

Nur verstehe ich dann nicht warum man manch eine .h header Datei in 
verschiedenen .c Dateien einbindet um so gewisse funktionen ja gerade 
ueber verschiedene .c Dateien zu teilen.
1
#include "Compiler.h"
2
...
3
#include "string.h"
4
#include "FSconfig.h"
5
6
DWORD MDD_SDSPI_finalLBA;
7
WORD gMediaSectorSize;
8
BYTE gSDMode;
9
static MEDIA_INFORMATION mediaInformation;
10
static ASYNC_IO ioInfo; //Declared global context, for fast/code efficient access

von test (Gast)


Lesenswert?

Simon schrieb:
> Zudem gibt es das wort static auch vor einer funktion, was soweit ich
> weisz dann aber bedeutet das diese funktion nur innerhalb der .c datei
> sichtbar ist.

Simon schrieb:
> Nur warum wird hier ausserhalb einer funktion static verwendet?

Aus dem gleichen Grund.

von Simon (Gast)


Lesenswert?

ok und wie weit ist dann eine Variable ohne static sichtbar?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Simon schrieb:
> ok und wie weit ist dann eine Variable ohne static sichtbar?

Mit einer extern - Deklaration kann sie aus jedem anderen C-Modul 
angesprochen werden, da der Linker die Symbolreferenz auflösen kann. 
Wird sie als static definiert, bekommt der Linker keinen Symbolnamen 
angeboten, und ein Zugriff über Modulgrenzen hinweg ist ausgeschlossen.

von Markus (Gast)


Lesenswert?

... und Funktion sind standartmässig extern, deshalb warnt der Compiler 
zwar dass die Funktion unbekannt ist, der Linker kann die aber dann 
trotzdem verlinken.

von Rolf Magnus (Gast)


Lesenswert?

Markus schrieb:
> ... und Funktion sind standartmässig extern

Variablen auf globaler Ebene auch.

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
Noch kein Account? Hier anmelden.