C/Biblioteki: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
→Budowa najprostszej biblioteki: #include <stdio.h> przeniesione z .h do .c; notka o (void) |
→Zmiana dostępu do funkcji i zmiennych (static i extern): extern z main.c wrzucony do .h |
||
Linia 78:
/* biblioteka.h */
/* biblioteka.c */
#include "biblioteka.h"
char zmienna_dzielona[] = "Zawartosc";
/* main.c */
Linia 89:
#include "biblioteka.h"
▲ '''extern char *zmienna_dzielona;'''
int main()
{
Linia 96 ⟶ 95:
}
Gdybyśmy tu nie zastosowali '''extern''', kompilator (nie linker) zaprotestowałby, że nie zna zmiennej ''zmienna_dzielona''. Próba dopisania deklaracji <tt>char
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 dzieki temu ukryć np. funkcje, które używane są przez samą bibliotekę, by nie dało się ich wykorzystać przez '''extern'''.
|