Jedną z rzeczy, które trudno mi zrozumieć, jest sposób działania kompilatora. Mam z tym wiele problemów, ale w szczególności ciągle mijają się nagłówki i biblioteki. Byłoby świetnie, gdyby ktoś mógł trochę wyjaśnić.
Jedną z rzeczy, które trudno mi zrozumieć, jest sposób działania kompilatora. Mam z tym wiele problemów, ale w szczególności ciągle mijają się nagłówki i biblioteki. Byłoby świetnie, gdyby ktoś mógł trochę wyjaśnić.
Odpowiedzi:
Pomyśl o obu w ten sposób (Uwaga: jest to analogia na wysokim poziomie;).
To podstawowa różnica między „interfejsem” a „implementacją”; interfejs (nagłówek) mówi, jak zadzwonić niektóre funkcje (nie wiedząc, jak to działa), natomiast realizacja (biblioteka) jest rzeczywista funkcjonalność.
Uwaga: Koncepcja jest tak fundamentalna, ponieważ zapewnia elastyczność: możesz mieć ten sam nagłówek dla różnych bibliotek (tj. Funkcjonalność jest wywoływana dokładnie w ten sam sposób), a każda biblioteka może implementować funkcjonalność w inny sposób. Utrzymując ten sam interfejs, można zastąpić bibliotek nie zmieniając swój kod.
Oraz: możesz zmienić implementację biblioteki bez łamania kodu wywołującego!
Util.libJak wywołać jej funkcję? Czy muszę dołączyć jego pliki nagłówkowe również istotne dla U til.lib?
Plik nagłówkowy to zwykle używany do definiowania interfejsu lub zestawu interfejsów w aplikacji. Potraktuj plik nagłówkowy jako coś, co pokazuje zewnętrzną funkcjonalność programu, pomijając techniczne szczegóły implementacji.
Na przykład, jeśli optymalizowałeś program, najprawdopodobniej zmodyfikowałbyś plik źródłowy (.cpp), aby ulepszyć algorytm, ale plik nagłówkowy nie zmieniłby się, ponieważ klienci zewnętrzni nadal wywołują metody przy użyciu tego samego zestawu parametrów i zwracane wartości.
W języku zorientowanym obiektowo, takim jak C ++, plik nagłówkowy zazwyczaj zawiera następujące elementy:
Chociaż nic nie stoi na przeszkodzie, aby kod został zaimplementowany w pliku nagłówkowym, generalnie nie jest to preferowane, ponieważ może wprowadzić dodatkowe sprzężenie i zależności w kodzie.
W niektórych przypadkach (np. Klas opartych na szablonach) implementacja musi być zdefiniowana w pliku nagłówkowym ze względów technicznych.
Biblioteka jest zbiorem kodu, który chcesz udostępnić programu lub grupy programów. Obejmuje implementację określonego interfejsu lub zestawu interfejsów.
Kod jest zdefiniowany w bibliotece, aby zapobiec powielaniu kodu i zachęcać do ponownego wykorzystania. Biblioteka może być połączona statycznie (.lib) lub dynamicznie (.dll):
Statycznie połączone biblioteka zawiera zbiór symboli eksportu (które mogą być traktowane jako definicji sposobu), które są następnie połączone do końcowego wykonywalnego (.exe) w wiążącym etapie budowy. Ma tę zaletę, że skraca czas wykonywania (ponieważ biblioteka nie musi być ładowana dynamicznie) kosztem większego pliku binarnego (ponieważ metody są zasadniczo replikowane w pliku wykonywalnym).
Dynamicznie powiązane biblioteka jest powiązana w trakcie realizacji programu, a nie powiązania programu. Jest to przydatne, gdy wiele programów musi ponownie używać tych samych metod i jest szeroko stosowane w technologiach takich jak COM.
Jedną rzeczą, która może być myląca, jest to, że biblioteka słów może mieć kilka znaczeń w C ++. Jedno znaczenie zostało tutaj dobrze omówione:
Zestaw funkcji, które można połączyć w pliku binarnym. Mogą być połączone statycznie lub dynamicznie.
Ale jest inny typ biblioteki: tak zwane biblioteki tylko nagłówkowe (w tym części STL, TR1 i Boost). Te nie istnieją w oddzielnej formie binarnej, więc biblioteka słów nie odnosi się do konkretnego pliku binarnego, ale raczej do zestawu dołączonych plików nagłówkowych.
Mam nadzieję że to pomoże.
Biblioteka to kod, skompilowany w zestawie plików obiektowych. Pliki obiektowe zawierają skompilowany kod maszynowy i deklaracje danych używane przez kod.
Plik nagłówkowy definiuje interfejs do biblioteki: informuje, jak poprawnie używać biblioteki. W C / C ++ plik nagłówkowy zawiera listę nazw funkcji i sposób wywoływania tych funkcji: liczbę i typy przyjmowanych przez nie parametrów, typ zwracania, konwencję wywoływania itp. Pliki nagłówkowe zawierają wiele innych rzeczy je też, ale ostatecznie sprowadza się to do zestawu reguł wywoływania kodu biblioteki.
Nagłówek zawiera tylko deklarację, podczas gdy biblioteki zawierają również implementację.
Jeśli Biblioteka w językach programowania jest biblioteką ogólną, to wiele książek obecnych w bibliotece można porównać z funkcjami / metodami w językach. A także pliki nagłówkowe można porównać z numerem wiersza książki Przypuśćmy, że w jakiejś bibliotece w Hyderabad jest książka iw tej bibliotece ta książka jest obecna w wierszu numer 24 ... Tak samo, jak podano adres biblioteki używając przestrzeni nazw std (dla biblioteki standardowej) i wiersz nr jest podawany przez plik nagłówkowy, w którym umieszczane są wszystkie książki (w tym przypadku metody) o tym samym czasie (wszystkie metody związane ze strumieniami wejścia / wyjścia)
Nagłówek jest zwykle używany do przechowywania prototypów. Nagłówki rozwijają się w czasie wstępnego przetwarzania, więc w czasie kompilacji kod może mieć dostęp do odpowiednich deklaracji / prototypów funkcji.
Biblioteka jest rzeczywistym oprogramowaniem, które zawiera definicje prototypów funkcji (obecnych w nagłówku). Biblioteka jest używana w czasie łączenia. Definicje (obecne w bibliotece) są rozwiązywane w czasie łączenia.
PLIK NAGŁÓWKOWY to taki, w którym zapisywana jest deklaracja funkcji, a używając pliku nagłówkowego możemy uzyskać dostęp do określonej funkcji
podczas
PLIK LIBRARY to plik, w którym zapisana jest definicja określonej funkcji. MATH.H jest plikiem nagłówkowym, podczas gdy MATH.LIB jest plikiem bibliotecznym.
Praca z plikiem HEADER i LIBRARY w programie.
Plik nagłówkowy zawiera łącza do bibliotek (biblioteki zawierają standardowe funkcje i metody), kompilator rozpoznaje standardowe funkcje użyte w kodzie źródłowym poprzez preprocesor, który rozwiązuje wszystkie dyrektywy (dyrektywy to linie w programie poprzedzone znakiem #, które zawierają ) przed właściwą kompilacją programu.
Dziękuje za przeczytanie!
Myślę, że biblioteka jest pakietem kodu, który jest wielokrotnie używany i ten kod jest prekompilowany, dlatego jest dostępny w standardowej formie, dzięki czemu nie musimy pisać tego kodu dla każdego programu, który tworzymy. Plik nagłówkowy zawiera odniesienie do tego kodu w prosty sposób, funkcje, których używamy w naszym programie, takie jak "cin" i "cout", są w pełni zdefiniowane w standardowej bibliotece, a pliki nagłówkowe, takie jak plik nagłówkowy iostream, zawierają odniesienie do tego kodu. Kiedy więc kompilujemy nasz kod, otrzymujemy po prostu prekompilowany kod dla cin i cout, i nie musimy pisać kodu dla cin i cout za każdym razem, gdy go używamy. Lub w prostszy sposób możemy powiedzieć, że biblioteka zawiera kody dla wszystkich funkcji, a plik nagłówkowy jest sposobem na dotarcie do tego kodu.
Biblioteka to zbiór podobnych obiektów do okazjonalnego użytku. Zwykle zawiera programy w postaci kodu obiektowego lub źródłowego, szablony itp.
Plik nagłówkowy to lokalizacja (interfejs) biblioteki
Parafrazując klasyczny żart, różnica polega na tym, że biblioteka ma plik nagłówkowy, podczas gdy plik nagłówkowy nie ma biblioteki.
Biblioteki są jak martwe mumie, owinięte białymi długimi nitkami. Oni są martwi. Jedynym sposobem na ich uwolnienie jest użycie plików nagłówkowych. Pliki nagłówkowe zawierają sposoby na ożywienie ich i można je ożywić wiele razy (ponowne wykorzystanie kodu).
Można rozważyć ten przykład understand- Math.hplik jest nagłówek, który zawiera prototyp dla wywołań funkcji, takich jak sqrt(), pow()etc, natomiast libm.lib, libmmd.lib, libmmd.dllto tylko niektóre z bibliotek matematycznych. Mówiąc prosto, plik nagłówkowy jest jak wizytówka, a biblioteki są jak prawdziwa osoba, więc używamy wizytówki (plik nagłówkowy), aby dotrzeć do właściwej osoby (Biblioteka).
Kod z bibliotek będzie przechowywany tylko w razie potrzeby dla pliku nagłówkowego. Cały plik nagłówkowy zostanie zapisany, co oszczędza obszar pamięci procesora.