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;
}