Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dzielenie kodu na kilka plików - po co się to robi?

Ostatnio zmodyfikowano 2013-05-24 20:53
Autor Wiadomość
Mix
Temat założony przez niniejszego użytkownika
Dzielenie kodu na kilka plików - po co się to robi?
» 2013-05-24 18:39:38
Witam,

Mam takie pytanie do czego konkretnie są nam potrzebne moduły?

Tworzę w tej chwili projekt na zajęcia i początkowo niewiele czytając o modułach stworzyłem po prostu pliki nagłówkowe, w których zadeklarowałem wszystkie funkcje i od razu z miejsca je zaimplementowałem. Następnie dołączając do kolejnego pliku nagłówkowego, czy do main.cpp dyrektywę
#include <nazwa.h>
 byłem w stanie wywoływać zadeklarowane w pliku nagłówkowym funkcje.

Wszystko się kompilowało. Jednak problem pojawił się, gdy doczytałem, że moduł to nie tylko plik nagłówkowy, a komplet pliku nagłówkowego z plikiem cpp. Chciałem przerobić swój program, ale wówczas się okazało, że w "pełnych" modułach nie można używać zmiennych globalnych bo są później za każdym razem od nowa deklarowane w innym module zawierającym moduł z deklaracją zmiennej i następuje "przedeklarowanie" zmiennej.

Jako, że wszystko działało postanowiłem program zostawić tak jak był. Teraz dorobiłem do niego wersję okienkową, gdzie również nie miałem żadnych problemów z tym związanych.

Zacząłem się jednak zastanawiać. Skoro idąc moim tokiem rozumowania wystarczy jedynie plik nagłówkowy, to po co ludzie właściwie tworzą dodatkowe pliki. No jedyne co się nasuwa na myśl to to, że coś przeoczyłem i musi być w tym jakiś konkretny cel.

Czy to, że w moim programie nie mam pełnych modułów (właściwie kilka pełnych modułów jest, dla plików nagłówkowych, w których nie potrzebowałem deklaracji zmiennych globalnych), a jedynie pliki nagłówkowe może w jakimś etapie tworzenia aplikacji okazać się problematyczne?
P-83795
pekfos
» 2013-05-24 18:50:50
nie można używać zmiennych globalnych bo są później za każdym razem od nowa deklarowane w innym module zawierającym moduł z deklaracją zmiennej i następuje "przedeklarowanie" zmiennej.
Można używać, o ile się je zadeklaruje, a nie zdefiniuje. Najwyraźniej nie rozróżniasz tych dwóch pojęć.
C/C++
//DEKLARACJE
extern int zmienna;
void funkcja();
struct struktura;

//DEFINICJE
int zmienna;
void funkcja() { }
struct struktura { };
P-83797
Mix
Temat założony przez niniejszego użytkownika
» 2013-05-24 20:13:19
Dzięki, to w sumie sporo zmienia, ale właściwie nadal nie wiem po co mi dwa pliki skoro to samo mogę zrobić w jednym. Ułatwia to coś?
P-83803
m4tx
» 2013-05-24 20:39:57
Skoro idąc moim tokiem rozumowania wystarczy jedynie plik nagłówkowy, to po co ludzie właściwie tworzą dodatkowe pliki. No jedyne co się nasuwa na myśl to to, że coś przeoczyłem i musi być w tym jakiś konkretny cel.
Masz na myśli "po co tworzyć pliki .cpp, skoro .h/.hpp są wystarczające"? Jeśli tak, to:
  • Gdy tworzysz własną bibliotekę, nie musisz udostępniać jej kodu źródłowego - wystarczą bowiem przecież same pliki .h/.hpp; gdybyś w nich umieścił cały kod, byłbyś zmuszony również wydać bibliotekę jako open-source
  • Gdy masz oddzielnie definicję klasę w .h(pp) i definicję metod tej klasy w .cpp, jest większy porządek
  • Szybsza kompilacja w przypadku podzielenia modułów - nie musisz kompilować za każdym razem całego kodu źródłowego programu, a jedynie te pliki, które zostały zmodyfikowane; za każdym razem kompilujesz więc jedynie pliki nagłówkowe (choć nawet i to nie jest potrzebne - patrz: prekompilowane nagłówki)
  • Możesz także 1 moduł zrobić w postaci jednego pliku .h/.hpp i kilku plików .cpp, dzięki czemu kod staje się czytelniejszy; możesz także zrobić oddzielne pliki .cpp np. dla każdej wspieranej platformy wszędzie tam, gdzie wykorzystujesz rzeczy OS- i platform-dependent
P-83806
Mix
Temat założony przez niniejszego użytkownika
» 2013-05-24 20:53:26
Dziękuję za dość rozbudowaną odpowiedź. To teraz zabieram się za przerabianie programu na pełne moduły
P-83810
« 1 »
  Strona 1 z 1