-
        
+ Antworten
Ergebnis 1 bis 3 von 3

Thema: Deklaration/Definition

  1. #1
    anfängerrr
    Gast

    Deklaration/Definition

    Hallo,

    mal ne ganz dumme Frage:
    Was ist der Unterschied zwischen Deklaration und Definition einer Variablen?
    Warum können Variablen nicht bei ihrer Deklaration initialisiert werden???
    Irgendwie habe ich den Überblick verloren und hoffe auf eindeutige Erklärung.
    Danke

  2. #2
    Gast
    Deklaration:

    unsigned char i;

    Definition/Initialisierung:

    i = 0;

    Man kann auch beides mit einmal machen, kommt halt immer drauf an:

    unsigned char i = 0;

    Wenn du in einer Header-Datei eine Variable global anlegst, dann darfst du sie dort nur deklarieren. Initialisiert wird sie in der zugehörigen C-Datei.
    Arbeitest du mit einer Variable lokal in einer Funktion o.ä., dann dürfen beide Schritte mit einem mal ausgeführt werden.

    Alle Klarheiten beseitigt?

  3. #3
    Neuer Benutzer
    Registriert seit
    23.08.2004
    Ort
    Seevetal
    Alter
    53
    Beiträge
    1

    Deklaration und Definition

    Noch eine kleine Ergänzung:
    Die Deklaration macht dem Linker nur den Typ einer Variable bekannt. Die Definition sagt dem Compiler, wieviel Speicherplatz reserviert werden muss.
    Eine reine Deklaration wäre 'extern int i;' in einer Datei 'a.c'. Es wird hier kein Speicherplatz fuer i reserviert. Der Linker wird mit dieser Deklaration lediglich beauftragt, nach einer Datei zu suchen, in der die Definition 'int i' steht. In der Datei 'b.c' könnte dann 'int i;' stehen. Hier würde der Linker fündig. Mit 'int i' wird der Compiler beauftragt, tatsächlich die 4B für Integer auf einem 32-Bit-System zu besorgen. Es darf unter den gelinkten Dateien aber nur eine geben, die mit 'int i' i global definiert! Ein lokales normales 'int i;' ist immer eine Deklaration und Definition zugleich.
    Die Initialisierung ist die erste Zuweisung einer Variablen. Bei globalen Variablen (die also im Speicherbereich heap abgelegt werden und die ganze Laufzeit des Programms erhalten bleiben) findet in C eine automatische Initialisierung mit dem Wert 0 statt, bei lokalen wird zwar Speicherplatz reserviert, aber dessen Inhalt ist nicht vom ANSI-C-Standard vorgeschrieben.
    Genauer steht´s im ANSI-C-Standard oder bei Kernighan&Ritchie "Programmieren in C".
    Nach bestem Wissen und Gewissen und mit Gruß
    Andreas.

    P.S.: Dynamisch allozierte Variablen (also z.B. mit malloc() besorgter Speicherplatz) werden zwar auf dem Heap abgelegt, und sind damit definiert, aber noch nicht initialisiert.

+ Antworten

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •