Mój kod składa się z 2 plików źródłowych .c oraz jednego pliku nagłówkowego .h. Wygląda to tak:
NAGLOWEK.H
int liczba_rzutow = 0;
MAIN.C
#include "naglowek.h"
extern int liczba_rzutow; //lacznosc zewnetrzna
int main(void)
{
return 0;
}
FUNKCJA.C
#include "naglowek.h"
extern int liczba_rzutow; //lacznosc zewnetrzna
Pytanie brzmi: Dlaczego to się nie kompiluje? Mam błąd "Znaleziono co najmniej jeden wielokrotnie zdefiniowany symbol". Dopiero gdy w pliku naglowek.h napiszę: "int liczba_rzutow;" bez przypisywania do zera, to się kompiluje. To teoretycznie jedno i to samo, bo niezdefiniowana zmienna zewnętrzna ma wartość początkową 0, ale ja bym chciał, aby zmienna liczba_rzutow była zdefiniowana wybraną przeze mnie liczbą.
Przychodzi mi do głowy, że może ta zewnętrzna zmienna liczba_rzutow jest załączana do programu dwukrotnie, raz do pliku main.c oraz raz do funkcja.c i stąd ten błąd. Ale chyba to by trochę zaprzeczało potrzebie używania słowa extern.
Napisałem za to coś podobnego używając trzech plików z rozszerzeniem .c i się kompiluje:
INICJALIZACJA.C
int liczba_rzutow = 0;
FUNKCJA.C
extern int liczba_rzutow;
MAIN.C
extern int liczba_rzutow;
int main(void)
{
return 0;
}
W jaki sposób więc można rozwiązać ten problem? Zaznaczę, że zmienna liczba_rzutow ma być zdefiniowana w pliku nagłówkowym .h i widoczna dla obu plików źródłowych z rozszerzeniem .c.