C/Biblioteki: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
m częściowy revert
Linia 90:
Gdybyśmy tu nie zastosowali '''extern''', kompilator (nie linker) zaprotestowałby, że nie zna zmiennej ''zmienna_dzielona''. Próba dopisania deklaracji <tt>char zmienna_dzielona[];</tt> 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 [[C/Zmienne#static|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 biblioteki<ref>Tak 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.</ref>. 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'''.
 
Ale nie sposób powiedzieć o static bez podania ciekawego zastosowania: prywatne pola w klasie.
 
Tworzenie klas zostało opisane w rozdziale [[C/Wskaźniki#Do czego można użyć wskaźników na funkcje?|o wskaźnikach]].
 
Prywatne pola deklarujemy jako static i odwołujemy się do nich bez przedrostka <tt>obj.</tt> (patrz [[C/Wskaźniki#Autorekursja]]).
<noinclude>{{Przypisy}}
{{Nawigacja|C|