mikrocontroller.net

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


Autor: Dani (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
...
}

Autor: Mario Richter (mario001) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mario Richter (mario001) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Rede ;-)

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist ja gut :-)
Habs schnell bei dir abgeschreipt :-)

Autor: Dani (Gast)
Datum:

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiere es doch mal aus.....

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mario Richter (mario001) Benutzerseite
Datum:

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

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Frage zu den Variablen:
Welche Vorteile bietet die Verwendung von lokalen Variablen?

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke
MfG
Wolfgang

Autor: Rudolph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meinste so?

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bastler (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rudolph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Welche Vorteile bietet die Verwendung von lokalen Variablen?

Das sorgt für Ordnung.

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.