0 Daumen
530 Aufrufe

Frage:

Unterschied zwischen Deklaration und Definition? Deklaration besteht aus int Zahl, als Datentyp und Datenname?

3.2 Deklaration und Definition

Bevor Sie eine Variable verwenden kōnnen, mūssen Sie dem Compiler den Datentyp und den Bezeichner mitteilen. Dieser Vorgang wird als Deklaration bezeichnet. (...)

Damit eine Variable auch verwendet werden kann, muss Speicherplatz dafür reserviert werden. Für das konkrete Speicherobjekt der Variablen im Programm bzw. im ausführbaren Code wird die Definition vereinbart.

Eine Deklaration darf mehrmals im Code vorkommen, eine Definition hingegen nur einmal im Programm. Wenn Sie beispielsweise eíne Ganzzahlvariable ivar wie folgt vereinbaren:

int ivar;

deklarieren Sie eine Variable vom Datentyp int mit dem Bezeichner ivar und definieren sie auch gleichzeitig. Somit ist es in diesem Beispiel nicht falsch zu sagen, dass eine Definition gleichzeitig auch eine Deklaration ist.
Avatar von

1 Antwort

+1 Daumen

Die Deklaration legt fest, welche Variable welchen Typ hat.

Die Definition legt fest, wo der Wert der Variablen im Speicher liegt.

int ivar; ist gleichzeitig Deklaration und Definition.

Man kann nicht trennen, welcher Teil die Deklaration und welcher Teil die Definition ist.

Eine Deklaration ohne Definition ist aber möglich. Dazu ein

Beispiel.

// main.c
#include <stdio.h>
#include "header.h"

int main() {
  printf("Variable i hat den Wert %d\n", i);
printf("Variable i hat den Wert %d\n", get_i());
}
// header.h
int i = 5; // Deklaration und Definition
int get_i();
// get_i.c
#include "header.h"

int get_i() {
return i;
}

Kompilieren mit gcc main.c get_i.c ergibt die Fehlermeldung multiple definition of 'i'.

Grund ist, dass über #include "header.h" sowohl in main.c, als auch in get_i.c die Variable i definiert wird.

Lösung.

// header.h
extern int i; // Deklaration ohne Definition
int get_i();
// get_i.c
#include "header.h"

int i = 5; // Deklaration und Definition

int get_i() {
return i;
}
Avatar von 5,6 k

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community