Arnold_S napisał(a):1. Czy definicje funkcji mogą być w pliku unit1.cpp, a deklaracje muszą być w unit1.h? - jeśli tak to gdzie dokładnie?
2. Czy na odwrót?
3. Czy w 1 przypadku, w pliku unit1.h zaraz pod includami muszę wpisać zmienne globalne z pliku unit1.cpp z dodatkiem extern?
1.Definicja może być jednocześnie deklaracją, wtedy wystarczy ją umieścić w pliku źródłowy, Należy jednak zachować w takiej sytuacji odpowiednią kolejność. Taka funkcja musi znajdować się nad funkcją, która ją wywołuje, przykłady:
Prawidłowo:
void MojaFunkcja(void)
{
//coś tak robi
}
//-----------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MojaFunkcja();
}
Nieprawidłowo:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MojaFunkcja();
}
//-----------------------------------------------------
void MojaFunkcja(void)
{
//coś tak robi
}
Jeżeli tworzysz oddzielnie deklarację i definicję, wtedy umieszczasz deklarację w pliku nagłówkowym w sekcji private o ile funkcja ma być metodą klasy formularza, ale wtedy musisz ją przypisać do tego formularza w definicji, przykład:
Prawidłowo:
//plik nagłówkowy
private:
void MojaFunkcja(void);
// dalej w pliku źródłowym
void TForm1::MojaFunkcja(void)
{
// coś tam robi.
}
Nieprawidłowo:
//plik nagłówkowy
private:
void MojaFunkcja(void);
// dalej w pliku źródłowym
void MojaFunkcja(void)
{
// coś tam robi.
}
Jeżeli deklarujesz funkcję w sekcji public, wtedy może, ale nie musi być metodą klasy formularza.
2.Na pewno nie na odwrót.
3.W żadnym razie. extern umieszczasz tylko wtedy, gdy tworzysz funkcje globalne w oddzielnych plikach (nagłówkowym i źródłowym) i włączasz te pliki do projektu aplikacji. Ale nawet w takiej sytuacji eksportujesz te funkcje w pliku nagłówkowym. Jeżeli jednak tworzysz oddzielny plik z funkcjami - tylko plik CPP, czyli źródłowy, bo i tak można, to wtedy używasz extern w tym pliku zaraz pod sekcją include. extern w pliku źródłowym używa się również w przypadku tworzenia np. bibliotek DLL.
Zauważ, że jeżeli tworzysz oddzielny plik z funkcjami w kombinacji *.CPP + *.H, to w aplikacji w sekcji include włączasz plik nagłówkowy *.H, np:
w takim przypadku wszystkie deklaracji muszą znajdować się w tym pliku. Gdybyś tworzył tylko plik źródłowy i rezygnujesz z nagłówkowego, to wtedy włączasz taki plik do projektu: