Gültigkeitsbereich von Variablen in C

Persönliche Seite
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.
Gast
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.
Gast
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.
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
Gast
>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.
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.
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.
Gast
>> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.