0Pricing
C Academy · Lekcja

extern i zakres globalny

Udostępnianie między plikami

extern i zakres globalny to bezpłatna lekcja C Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.

Zmienne globalne

Zmienna zadeklarowana poza każdą funkcją ma zakres pliku i istnieje przez cały czas działania programu. Jest to zmienna globalna.

#include <stdio.h>
int counter = 0;
void bump(void) {
    counter++;
}
int main(void) {
    bump();
    bump();
    printf("counter = %d\n", counter);
    return 0;
}

Zmienne globalne są współdzielone

Każda funkcja w pliku może odczytywać i modyfikować zmienną globalną. Dzięki temu są one wygodne, ale łatwo można ich użyć niewłaściwie.

#include <stdio.h>
int score = 100;
void penalty(void) { score -= 25; }
void bonus(void) { score += 10; }
int main(void) {
    penalty();
    bonus();
    printf("score = %d\n", score);
    return 0;
}

Domyślna inicjalizacja zerem

Zmienne globalne bez inicjalizatora są automatycznie ustawiane na wartość 0.

#include <stdio.h>
int total;
int main(void) {
    printf("total = %d\n", total);
    return 0;
}

Słowo kluczowe extern

extern deklaruje zmienną globalną, która jest definiowana w innym miejscu. Informuje kompilator, że zmienna istnieje, bez przydzielania dla niej pamięci.

#include <stdio.h>
int shared = 5;
extern int shared;
int main(void) {
    printf("shared = %d\n", shared);
    return 0;
}

Deklaracja a definicja

Definicja przydziela pamięć. Deklaracja tylko nadaje czemuś nazwę. Deklaracje extern nie przydzielają pamięci.

#include <stdio.h>
int value = 42;
int main(void) {
    extern int value;
    printf("value = %d\n", value);
    return 0;
}

Współdzielenie między plikami

W projektach wieloplikowych jeden plik .c definiuje zmienną globalną, a pozostałe pliki używają extern w pliku nagłówkowym, aby uzyskać do niej dostęp.

#include <stdio.h>
extern int globalCount;
int globalCount = 3;
int main(void) {
    printf("globalCount = %d\n", globalCount);
    return 0;
}

Funkcje również mogą być extern

Funkcje mają domyślnie powiązanie zewnętrzne, więc prototyp jest w praktyce deklaracją tej funkcji z użyciem extern.

#include <stdio.h>
extern void hello(void);
void hello(void) {
    printf("Hello from extern\n");
}
int main(void) {
    hello();
    return 0;
}

Czas życia zmiennych globalnych

Zmienne globalne istnieją od początku do końca programu, dlatego ich wartości są zachowywane między wszystkimi wywołaniami funkcji.

#include <stdio.h>
int visits = 0;
void page(void) { visits++; }
int main(void) {
    page();
    page();
    page();
    printf("visits = %d\n", visits);
    return 0;
}

Ryzyko związane ze zmiennymi globalnymi

Ponieważ dowolny kod może zmienić zmienną globalną, śledzenie błędów staje się trudne. Jeśli to możliwe, należy przekazywać wartości jako parametry.

#include <stdio.h>
int config = 1;
int compute(int input) {
    return input * config;
}
int main(void) {
    printf("%d\n", compute(8));
    return 0;
}

Globalne zmienne tylko do odczytu

Połączenie const ze zmienną globalną tworzy współdzieloną stałą, której nie można modyfikować.

#include <stdio.h>
const int MAX_USERS = 50;
int main(void) {
    printf("MAX_USERS = %d\n", MAX_USERS);
    return 0;
}

Praktyczny wzorzec

Globalna wartość konfiguracji odczytywana przez kilka funkcji to częste i akceptowalne zastosowanie.

#include <stdio.h>
int multiplier = 3;
int scale(int x) { return x * multiplier; }
int main(void) {
    printf("%d\n", scale(4));
    printf("%d\n", scale(7));
    return 0;
}

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę na temat extern i zmiennych globalnych.

Podsumowanie: extern i zmienne globalne

Dowiedzieli się Państwo o zmiennych globalnych i powiązaniu zewnętrznym.

  • Zmienne globalne są zmiennymi o zakresie pliku i czasie życia obejmującym cały program
  • Domyślnie mają wartość 0 i są współdzielone przez wszystkie funkcje
  • extern deklaruje zmienną globalną zdefiniowaną w innym miejscu
  • Definicja przydziela pamięć, a deklaracja tylko nadaje nazwę
  • Należy oszczędnie używać zmiennych globalnych, aby unikać ukrytych zależności

Często zadawane pytania

Czy lekcja „extern i zakres globalny” jest bezpłatna?

Tak — pełny tekst „extern i zakres globalny” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „extern i zakres globalny”?

Udostępnianie między plikami Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C Academy?

Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „extern i zakres globalny”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?

Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. auto i zakres lokalny
  2. Zmienne static
  3. extern i zakres globalny
  4. register i const
← Powrót do C Academy