Kurs programowania w C cz.136

Nasza ocena:

5
Wyświetleń: 518
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz.136 - strona 1

Fragment notatki:

JAK ZBUDOWANA JEST BIBLIOTEKA 153 Zmiana dostępu do funkcji i zmiennych (static i extern) Język C, w przeciwieństwie do swego młodszego krewnego — C++ nie posiada praktycz- nie żadnych mechanizmów ochrony kodu biblioteki przed modyfikacjami.  C++  ma w swoim asortymencie m.in. sterowanie uprawnieniami różnych elementów klasy. Jednak programista, piszący program w C nie jest tak do końca bezradny. Autorzy C dali mu do ręki dwa na- rzędzia:  extern  oraz  static . Pierwsze z tych słów kluczowych informuje kompilator, że dana funkcja lub zmienna istnieje, ale w innym miejscu, i zostanie dołączona do kodu programu w czasie łączenia go z biblioteką. extern  przydaje się, gdy zmienna lub funkcja jest zadeklarowana w bibliotece, ale nie jest udostępniona na zewnątrz (nie pojawia się w pliku nagłówkowym). Przykładowo: /* biblioteka.h */ extern char zmienna_dzielona[]; /* biblioteka.c */ #include "biblioteka.h" char zmienna_dzielona[] = "Zawartosc"; /* main.c */ #include  #include "biblioteka.h" int main() { printf("%s\n", zmienna_dzielona); return 0; } Gdybyśmy tu nie zastosowali  extern , kompilator (nie linker) zaprotestowałby, że nie zna zmiennej  zmienna dzielona . Próba dopisania deklaracji char zmienna  dzielona;  stworzyłaby nową zmienną i utracilibyśmy dostęp do interesującej nas zawartości. Odwrotne działanie ma słowo kluczowe  static  użyte w tym kontekście (użyte wewnątrz bloku tworzy zmienną statyczną, więcej informacji w rozdziale  Zmienne).  Może ono odnosić się zarówno do zmiennych jak i do funkcji globalnych. Powoduje, że dana zmienna lub funkcja jest niedostępna  na zewnątrz bibliotek i 1.  Możemy dzięki temu ukryć np. funkcje, które używane są przez samą bibliotekę, by nie dało się ich wykorzystać przez  extern . 1Tak naprawdę całe “ukrycie” funkcji polega na zmianie niektórych danych w pliku z kodem binarnym danej biblioteki (pliku .o), przez co linker powoduje wygenerowanie komunikatu o błędzie w czasie łączenia biblioteki z programem. ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz