2013-03-22 15 views
13

Jakie są zalety korzystania z wielu plików źródłowych (.cpp) i nagłówkowych (.h) w jednym projekcie?Jakie są zalety korzystania z więcej niż jednego pliku kodu dla projektu? (C++)

Czy jest to coś uprzywilejowanego, czy istnieją prawdziwe korzyści?

+2

Niektóre pliki można następnie uwzględnić w wielu projektach. I nie zgubisz się w pliku 1000 linii? A co z przewijaniem do predefinicji funcjonalnych przez cały czas? –

+7

Kod mojej firmy to około 30000 plików cpp, każdy z 1000-20000 linii. Nie chcę mieć do czynienia z plikiem 4GB kodu. –

+10

@MooingDuck Nie chcę mieć do czynienia z plikiem 20000 linii, szczerze mówiąc. ;-) –

Odpowiedz

20

Pomaga podzielić kod i posortować według tematu. W przeciwnym razie otrzymasz jeden plik z 1000 liniami ... który jest trudny do zarządzania ...

Zazwyczaj ludzie mają .h i .c na jedną lub kilka lekcji. Ponadto przyspiesza kompilację, ponieważ tylko zmodyfikowane pliki i niektóre powiązane pliki wymagają ponownej kompilacji.

Od Organizing Code Files in C and C++:

Dzielenie każdy rozsądnie wielkości projekt się kupuje pewne zalety, najważniejszym z nich są następujące:

  • Przyspieszenie kompilacja - większość kompilatory pracować plik na raz. Jeśli wszystkie twoje 10000 linii kodu są w jednym pliku, a zmienisz jedną linię, to musisz przekompilować 10000 linii kodu. Z drugiej strony, jeśli twoje 10000 linii kodu są równomiernie rozłożone na 10 plików, to zmiana wymaga tylko 1000 linii kodu do ponownej kompilacji. 9000 linii w pozostałych 9 plikach nie będzie wymagało rekompilacji. (Łączenie czas pozostaje bez zmian.)

  • Wzrost organizacja - Dzielenie kodu wzdłuż linii logicznych będzie sprawiają, że łatwiej (i wszelkich innych programistów nad projektem) do funkcji znalezienia, zmiennych, struct/klasy deklaracje i tak dalej. Nawet z możliwością przeskakiwania bezpośrednio do danego identyfikatora, który jest dostarczany w wielu edytorach i środowiskach programistycznych (takich jak Microsoft Visual C++), zawsze będą czasy, kiedy trzeba ręcznie zeskanować kod, aby coś wyszukać. Podobnie jak podział kodu zmniejsza ilość kodu, który trzeba przekompilować, to także redukuje ilość kodu, który trzeba przeczytać, aby znaleźć coś na . Wyobraź sobie, że musisz znaleźć poprawkę, którą wprowadziłeś do kodu dźwiękowego kilka tygodni temu. Jeśli masz jeden duży plik o nazwie GAME.C, , to potencjalnie dużo wyszukiwania. Jeśli masz kilka małych plików o nazwach GRAPHICS.C, MAINLOOP.C, SOUND.C i INPUT.C, znasz numer , w którym chcesz sprawdzić, skracając czas przeglądania o 3/4.

  • Ułatwienie ponownego wykorzystania kodu - Jeśli kod jest starannie podzielone na sekcjach, które działają w dużej mierze niezależnie od siebie, to pozwala użyć tego kodu w innym projekcie, oszczędzając dużo przepisywania później. Pisanie kodów wielokrotnego użytku jest o wiele ważniejsze niż używanie tylko organizacji logicznej , ale bez takiej organizacji trudno jest określić, które części kodu działają razem, a które nie. Dlatego umieszczenie podsystemów i klas w jednym pliku lub w starannie nakreślonym zbiorze plików pomoże ci później, jeśli spróbujesz użyć tego kodu w innym projekcie.

  • Kod udostępniania pomiędzy projektami - Zasada jest tutaj taka sama, jak w przypadku problemu ponownego użycia. Poprzez ostrożne rozdzielanie kodu na pewne pliki, możesz umożliwić wielu projektom użycie niektórych z tego samego kodu plików bez ich powielania. Zaletą udostępniania pliku kodu między projektami, a nie tylko kopiowania i wklejania, jest to, że każdy błąd naprawia w tym pliku lub pliki z jednego projektu wpłyną na inny projekt, więc oba projekty mogą być pewne wykorzystania najbardziej aktualna wersja .

  • kodowania podziału obowiązków wśród programistów - dla naprawdę dużych projektów, to jest chyba główny powód do oddzielania kodu do wielu plików. Niemożliwe jest, aby więcej niż jedna osoba mogła dokonać zmian w jednym pliku w danym momencie. Dlatego musisz użyć wielu plików, aby każdy programista mógł być pracujący na oddzielnej części kodu bez wpływu na plik , który edytują inni programiści. Oczywiście, nadal istnieje do sprawdzenia, że ​​2 programistów nie próbują zmieniać tego samego pliku; Systemy zarządzania konfiguracją i systemy kontroli wersji, takie jak CVS lub MS SourceSafe pomogą Ci tutaj. Wszystkie powyższe mogą być uważane za aspekty modułowości, kluczowym elementem zarówno projektowania strukturalnego, jak i obiektowego.

Następnie idą na około Jak to zrobić, potencjalnych pułapek, problemy mocujące itp

Należy to sprawdzić.

1

Jeśli jest to niewielki projekt, taki jak Witaj świecie, nie ma żadnej korzyści, ale wyobraź sobie coś podobnego do systemu Windows, Google Chrome lub Android.

nie można zarządzać projektem o takim rozmiarze za pomocą jednego pliku.

Wiele plików do projektu dotyczy możliwości zarządzania i ponownego wykorzystania kodu.

+0

+1 za możliwość ponownego użycia. Jedną z największych zalet programowania OO (C++/Java) jest to, że można używać podejścia MVC, używając klas do budowania obiektów obsługujących różne rzeczy. Wtedy, gdy potrzebujesz tego obiektu w innym projekcie lub aplikacji, po prostu użyj swojej wcześniejszej klasy i zaimportuj plik do bieżącego projektu. Oszczędza mnóstwo czasu. – Kyle

+0

Dzielenie kodu projektu na pliki skupione na jednej koncepcji usuwa także pokusę, aby klasy miały wygląd wewnętrznych elementów innych klas. –

11

Pliki kodów stają się niewiarygodne (spróbuj wyszukać w nich!) Po kilkuset liniach. Niektórzy ludzie osiągają nawet kilka tysięcy (ale to już jest problem). Nawet małe projekty mają tysiące linii, średnie projekty mają dziesiątki tysięcy linii, a duże projekty mają miliony linii. Edytory tekstu nie radzą sobie z tak dużymi plikami (ale sami programiści też nie mogą).

Dzielenie projektu na różne pliki źródłowe jest również wymagane , jeśli chcesz oddzielić swój projekt na różne jednostki kompilacji, co sprawia, że ​​kompilacja jest znacznie szybsza, ponieważ tylko części projektów wymagają ponownej kompilacji.

Kilka lat temu programy były pisane w jednym pliku/stosie kart. Programy te były jednak niewielkie w porównaniu do współczesnych programów i zupełnie nie do utrzymania w pamięci - nawet niewielkie zmiany w zasadzie wymagały przepisania, co dawało ustaloną górną granicę złożoności, którą można w ten sposób osiągnąć.

Nowoczesne, bardziej złożone projekty zasadniczo wymagają rozdzielenia. Kwestia umieszczenia wszystkiego w jednym pliku jest szczerze taka, której nigdy nie zadałem sobie, ponieważ pomysł jest po prostu niewyobrażalny.

+0

Dlaczego usunięto nieco informacji o tym, jak zmniejszyć czas kompilacji? To była ważna informacja, której nie znałem i dlatego przegłosowałem. – user1958850

+0

@ user1958850 Nie usunąłem tego ... –

2

Różne pliki cpp są kompilowane jako osobne jednostki kompilacji. Pozwala to na izolowanie rzeczy (nagłówków, anonimowych przestrzeni nazw, pimpl) od reszty kodu źródłowego.

Czasami dwie biblioteki nie mogą być używane razem w jednym pliku źródłowym, ponieważ mają zderzenia nazw. Można to rozwiązać, włączając każdy nagłówek biblioteki do innego pliku cpp i udostępniając wymagane funkcje poprzez odpowiednie pliki nagłówkowe.

Powiązane problemy