Forum: Mikrocontroller und Digitale Elektronik Gültigkeitsbereich von Variablen in C


von Dani (Gast)


Lesenswert?

Wollte kurz mal fragen was den der Unterschied zwischen diesen beiden 
Schreibweisen ist. Was ändert sich da in Bezug auf die Variable x?


int x=0;
int main(void){
...
}



int main(void){
int x=0;
...
}

von Mario R. (mario001) Benutzerseite


Lesenswert?

Im ersten Fall ist die Variable x eine "globale" Variable, ist also im 
gesamten C-File bekannt und benutzbar.

Im zweiten Fall ist x eine lokale Variable, kann also nur innerhalb main 
verwendet werden. Und: bei jedem neuen Durchlauf von main wird sie neu 
instanziiert, behält also einen vorherigen Wert nicht bei - ist bei main 
vielleicht nicht so wichtig, aber kann woanders wichtig sein.

von crazy horse (Gast)


Lesenswert?

im 1. Fall handelt es sich um eine globale Variable. Sie ist im gesamten 
Programm gültig und bekommt eine feste Adresse im RAM.

Im 2.Fall ist es eine lokale Variable, sie ist nur innerhalb der 
main-Funktion gültig und ansprechbar.

von Mario R. (mario001) Benutzerseite


Lesenswert?

Meine Rede ;-)

von crazy horse (Gast)


Lesenswert?

ist ja gut :-)
Habs schnell bei dir abgeschreipt :-)

von Dani (Gast)


Lesenswert?

hier handelt es sich ja aber ums "main". das heisst doch das die 
variable dann sowieso überall gültig sein wird, oder?

von Stefan (Gast)


Lesenswert?

Probiere es doch mal aus.....

von crazy horse (Gast)


Lesenswert?

main ist auch nur eine Funktion wie alle anderen - mit dem Unterschied, 
dass sie nach startup automatisch angesprungen wird. Sonst ist kein 
Unterschied zu anderen Funktionen.

von Mario R. (mario001) Benutzerseite


Lesenswert?

@crazy horse: Ich seh, wir sind uns schon wieder einig ... :-)

von Wolfgang-G (Gast)


Lesenswert?

Noch eine Frage zu den Variablen:
Welche Vorteile bietet die Verwendung von lokalen Variablen?

von Mark .. (mork)


Lesenswert?

Z.B dass keine anderen Funktionen darauf zugreifen können (Sicherheit) 
sowie die automatische Speicherfreigabe beim Verlassen der Funktion. Und 
lokale Arrays können mit variabler Größe angelegt werden.

MfG Mark

von Wolfgang-G (Gast)


Lesenswert?

Danke
MfG
Wolfgang

von Rudolph (Gast)


Lesenswert?

>Und lokale Arrays können mit variabler Größe angelegt werden.

Kannst Du das bitte mal erläutern?

In C können Arrays garnicht mit variabler Grösse angelegt werden.
Und wenn man den Speicher dynamisch allokiert ist es egal,
ob der Zeiger dazu global oder lokal ist.

von Bastler (Gast)


Lesenswert?

meinste so?

...
int function_x (wert){
unsigned char Array[wert];
...
}

von Karl H. (kbuchegg)


Lesenswert?

Rudolph wrote:
>>Und lokale Arrays können mit variabler Größe angelegt werden.
>
> Kannst Du das bitte mal erläutern?
>
> In C können Arrays garnicht mit variabler Grösse angelegt werden.

Seit C99 kann man das machen.

> Und wenn man den Speicher dynamisch allokiert ist es egal,
> ob der Zeiger dazu global oder lokal ist.

Stimme ich nicht zu.
Es ist niemals egal, ob man eine Variable lokal oder global
anlegt.
Man möchte nach Möglichkeit den Scope einer Variablen auf den
kleinstmöglichen Bereich einschränken, der gerade noch sinnvoll
ist.
Dieses Prinzip zur Komplexitätsbeherrschung hat sich als so
erfolgreich herausgestellt, das daraus ein letztendlich komplett
neues Programmierparadigma entstanden ist: Objektorientierte
Programmierung.

Klar OOP ist dann natürlich noch deutlich mehr, aber die Scope-
Begrenzung durch Klassen ist ein wesentlicher Bestandteil.

von Bastler (Gast)


Lesenswert?

ich meine kann man an lokales Array anlegen, wobei die Größe des Arrays 
der Funktion mitgegeben wird?

von Karl H. (kbuchegg)


Lesenswert?

Bastler wrote:
> ich meine kann man an lokales Array anlegen, wobei die Größe des Arrays
> der Funktion mitgegeben wird?

In C99 kann man das.

Probiers einfach aus ob dein Compiler schon soweit ist.
Wenn nicht, dann wird er dir eine Fehlermeldung um
die Ohren hauen, die sinngemäß "Array Size must be constant"
bedeutet.

von Rudolph (Gast)


Lesenswert?

>> In C können Arrays garnicht mit variabler Grösse angelegt werden.
>
>Seit C99 kann man das machen.

Interessant.

>> Und wenn man den Speicher dynamisch allokiert ist es egal,
>> ob der Zeiger dazu global oder lokal ist.
>
>Stimme ich nicht zu.
>Es ist niemals egal, ob man eine Variable lokal oder global anlegt.

Natürlich ist es nicht egal, wo man eine Variable anlegt.

Dem Compiler ist es allerdings schon egal, ob er einen globalen oder 
lokalen Zeiger bekommt dem er die Allokierung zuweisen kann.

von Unbekannter (Gast)


Lesenswert?

> Welche Vorteile bietet die Verwendung von lokalen Variablen?

Das sorgt für Ordnung.

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.