Frage von Sempiternal55, 57

Was genau ist deklarieren und definieren?

Hallo,

da ich nicht ganz verstehe was nun die Deklaration ist, habe ich das bei Wikipedia nachlesen wollen. Dort ist ein beispiel aufgeführt: extern int y; extern bewirkt, dass die Variable y nur deklariert, aber nicht definiert wird. Die Definition muss an einer anderen Stelle in derselben oder einer anderen Quelltext-Datei erfolgen.

Meine Frage, was ist nun eine Deklaration genau ? Und wie kann ich das verstehen das die Variable deklariert aber nicht definiert ist ?

Freu mich auf eure antwort :)

Expertenantwort
von martin7812, Community-Experte für programmieren, 18

Da du das Schlüsselwort "extern" verwendest, gehe ich davon aus, dass du C oder C++ als Programmiersprache verwendest.

Bei der Deklaration wird dem Compiler gesagt, dass es irgendwo im Programm eine bestimmte Variable oder eine bestimmte Funktion gibt (das wurde bereits in anderen Antworten geschrieben).

Bei der Definition wird diese Variable oder Funktion tatsächlich angelegt.

Wichtig: Bei einer Definition wird einer Variable noch nicht unbedingt (wie man aus den anderen Antworten falsch schließen könnte) ein Wert zugewiesen!

Ein Beispiel: Ein Programm besteht aus den Dateien "a.c" und "b.c":

Datei "a.c"
-----------
extern int a; // Deklaration
int b=10; // Definition mit Wertzuweisung
int c; // Definition ohne Wertzuweisung (!!)
int d=10; // Definition mit Wertzuweisung
int e=10; // Definition mit Wertzuweisung
...
a=1;
b=2+c;
Datei "b.c"
-----------
extern int a; // Deklaration
int b; // Definition ohne Wertzuweisung (!!)
extern int c; // Deklaration
int e=10; // Definition mit Wertzuweisung
...
a=d+4;

Es gilt nun folgendes:

  • Die Datei "b.c" wird sich nicht compilieren lassen. Der Grund: Bei der Zeile "a=d+4" weiß der Compilier nicht, was "d" ist, da die Deklaration von "d" fehlt. Prinzipiell "schaut" ein C- oder C++-Compiler nur diejenige Datei an, die er gerade compiliert. Er "weiß" also nicht, dass in der Datei "a.c" eine Variable "d" existiert. Dazu wäre eine Deklaration von "d" in der Datei "b.c" notwendig.
  • Wenn wir die Deklaration der Variable "d" in der Datei "b.c" hinzugefügt haben, wird das Programm durchcompilieren, aber nicht linken. Das bedeutet, dass der binäre Code (die so genannten "Objektdateien"), der aus den beiden Dateien "a.c" und "b.c" erstellt worden ist, sich nicht zu einem ausführbaren Programm (z.B. "test.exe") zusammenfügen lässt. Und zwar aus drei Gründen:
  • Von der Variable "a" existieren zwar Deklarationen, aber keine Definition. Dadurch existiert die Variable "a" im binären Code nicht. Man bekommt eine Fehlermeldung, dass die Variable "a" im binären Code nicht existiert.
  • Von der Variable "e" existieren zwei Definitionen mit Wertzuweisung. In diesem Fall ist es prinzipiell nicht möglich, die binären Codes zu einem Programm zusammenzusetzen, selbst wenn beide Wertzuweisungen den selben Wert (im Beispiel: 10) hatten. Man bekommt eine Fehlermeldung.
  • Manche Compiler ersetzen eine Definition ohne Wertzuweisung durch eine Definition mit einem Dummy-Wert ("int b;" -> "int b=0;"). In diesem Fall gilt für "b" dasselbe wie für "e". Aber auch bei Compiliern, die das nicht tun, bekommt man sehr oft eine Fehlermeldung, weil eine Variable mehrfach definiert ist und es wird keine ".exe"-Datei erstellt.
Antwort
von mrhashpipeotto, 53

deklaration ist die adresse deines wohnortes, also nur die bekanntmachung dass es dich auf diesem planeten gibt, definition ist dagegen dein häuschen mit garten und garage genau an dieser adresse, also die konkrete implementierung :D

in computersprache:

deklaration = irgendwo im prog gibt es eine variable foo

definition = die variable ist ein integer mit wert 3 :D

Antwort
von Monsieurdekay, 57

Bei der Deklaration wird z.B. die Variable nur namentlich genannt, also der Compiler weiß dann: Es gibt eine Variable, die XY heißt. Bei der Definition wird der Variable dann ein Wert zugewiesen XY=12

Kommentar von Sempiternal55 ,

AHSO  vielen dank :D

Kommentar von Omnivore08 ,

Das ist falsch. Bei der Definition wird nichts zugewiesen. Das ist die Initialisierung.

Antwort
von wotan38, 11

Rein sprachlich bedeutet definieren soviel wie festlegen, bestimmen. Deklarieren bedeutet bekannt machen, bekannt geben (z.B. beim Zoll, da gebe ich an, welche zu verzollende Ware ich im Koffer habe).

Antwort
von Omnivore08, 37

Deklaration ist lediglich die Bekanntgabe einer variable für den Compiler. Nicht mehr.

Bei der Definition wird dann auch noch Speicher für diese Variable reserviert (Bei C macht man das bei Zeigern mit malloc)

Und dann gibt es noch die Initialisierung: Erst jetzt bekommt die variable auch einen sinnvollen Wert.

Ich hoffe ich konnte dir helfen!

Antwort
von maximilianus7, 24

also ich wär bis dahin verwirrt. alles ein bisschen richtig und falsch.

also: definition:
int xyz;

damit wird xyz ein speicherplatz zugewiesen und xyz = 77; ist eine sinnvolle zuweisung. in den C-sprachen ist auch eine definition mit mit gleichzeitiger initialisierung möglich: int xyz = 77;

wenn das gesamte programm aus mehreren modulen (quelltexten) besteht, mag es manchmal sinnvoll sein auf eine variable zuzugreifen, die in einem anderen modul definiert ist.
im vertrauen darauf, dass dies so ist, wird dies dem compiler  mit dem extern-attribut mitgeteilt = deklariert:

extern int xyz;

falls diese variable nirgends definiert ist, so fällt es dem compiler nicht weiter auf. aber dem linker, der die verschiedenen module zusammenbindet (linked) schon.

Antwort
von SirNik, 6

Definition:
Was für ein yp -> int, double, etc.

Deklaration:
Variablenname -> variable1, etc

Initialisierung:
Wert Zuweisung -> = 3, etc.

Bsp:
int diesIstEinTest = 4
| | |
Definition | ____/
Deklaration /
Initialisierung

Antwort
von CocoKiki2, 45

kundtuung (deklaration) und bedeutungsbeschreibung (definition).

Keine passende Antwort gefunden?

Fragen Sie die Community