(Theoret. Info.) Deklaration VS. Definition

F_GXdx

Captain
Registriert
März 2006
Beiträge
4.028
Hallo,

Laut Wikipedia ist

int x;

eine Deklaration und Definition.

Für Subroutinen ist

int funktion(int x);

eine Deklaration aber keine Definition. Erst wenn die Funktion einen Inhalt bekommt, ist es auch eine Definition: (Obiges Beispiel wäre also ein Prototyp, wie man auch sagt)

zB

int funktion(int x){
x++;
return x;
}

Irgendwie finde ich das unlogisch, weil sich dabei 2 Widersprüche auftun:

1) Bei der Subroutine wird SPEICHERPLATZ und NAME festgelegt, mehr wird bei int x; ja auch nicht festgelegt, SPEICHERPLATZ und NAME. Warum ist dann das eine eine Definition und das andere nicht?

2) Nach dieser Logik wäre ja auch erst int x = 5; eine Definition und int x; nur eine Deklaration.

Was stimmt jetzt?

Danke und Gruß,
Tobias
 
Zuletzt bearbeitet:
Und noch eine Aussage: Wahr oder Falsch?

Eine Deklaration einer einer Subroutine reserviert Speicherplatz, eine Deklaration einer Variablen nicht.
 
Code:
int x;
int funktion( int zahl ) {
   ... }
Zu 1.
Dort ist kein Widerspruch! Beides sind Definitionen, da in beiden Fällen der Name bekannt gemacht wird und auch Speicher reserviert wird.

Zu 2.
int x = 5;
int y;
Beides Definitionen weil Speicher reserviert wird.
x erhält halt einen bestimmten Wert. y bleibt unbestimmt (hat aber den Wert der sich zu diesem Zeitpunkt zufällig an dieser Adresse befindet).

Zu deinem zweiten Beitrag:
Falsch!
Deklarationen reservieren niemals Speicher. Deklarieren ist nur "bekannt machen".

Deklarationen:
extern int zahl;
int funktion();
extern int addiere( int a, int b );

Defintionen (die auch gleichzeitig Deklarationen sind, wenn noch keine explizite Deklaration gemacht wurde):
int zahl;
int nummer = 5;
void blub( int x ) { ... }


Zusatzinfo zum merken:
In Headerdateien NIEMALS definieren. Immer nur mit deklarieren (in C mit extern).
 
int funktion(int a);

Reserviert also keinen Speicher? Gut, hatte ich anders im Kopf, dann klärt sich der Widerspruch langsam.
 
Zurück
Oben