0Pricing
C Academy · Lekcja

Projekty wieloplikowe

Pliki nagłówkowe i jednostki translacji

Projekty wieloplikowe to bezpłatna lekcja C Academy na CoddyKit. To lekcja 2 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.

Dlaczego dzielić pliki

Rzeczywiste programy nie mieszczą się w jednym pliku .c. Podział kodu na wiele plików:

  • Grupuje powiązane funkcje
  • Pozwala kompilatorowi ponownie budować tylko to, co się zmieniło
  • Ułatwia ponowne wykorzystywanie kodu w różnych projektach
  • Pozwala zespołowi pracować bez ciągłych konfliktów

Zrozumienie sposobu łączenia tych elementów jest niezbędne.

Jednostki translacji

Każdy plik .c, po rozwinięciu przez preprocesor jego dyrektyw #include, staje się jednostką translacji.

Kompilator niezależnie przekształca każdą jednostkę translacji w plik obiektowy (.o). Na tym etapie nie zna jeszcze pozostałych plików.

Deklaracja a definicja

Deklaracja informuje kompilator, że funkcja istnieje, i określa jej sygnaturę. Definicja zawiera właściwe ciało funkcji.

Inne pliki potrzebują tylko deklaracji, aby wywołać funkcję. Definicja znajduje się dokładnie w jednym miejscu.

int add(int a, int b);          /* declaration: a promise */

int add(int a, int b) {         /* definition: the body */
    return a + b;
}

Plik nagłówkowy

Deklaracje umieszcza się w pliku nagłówkowym (.h). Każdy plik, który chce używać danej funkcji, dołącza ten nagłówek.

Nagłówek jest publicznym interfejsem, a odpowiadający mu plik .c zawiera prywatną implementację.

/* math_utils.h */
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);
int mul(int a, int b);

#endif

Plik implementacji

Plik .c dołącza własny nagłówek i definiuje funkcje.

Dołączenie własnego nagłówka pozwala kompilatorowi sprawdzić, czy definicje są zgodne z deklaracjami.

/* math_utils.c */
#include "math_utils.h"

int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }

Korzystanie z modułu

Inny plik dołącza nagłówek i wywołuje funkcje. Nie musi znać ich ciał.

Kompilator ufa deklaracjom, a później konsolidator połączy wywołania z rzeczywistymi definicjami.

/* main.c */
#include <stdio.h>
#include "math_utils.h"

int main(void) {
    printf("%d\n", add(2, 3));
    return 0;
}

Kompilowanie i konsolidowanie

Są to dwa etapy. Najpierw należy skompilować każdy plik do pliku obiektowego za pomocą -c. Następnie trzeba skonsolidować pliki obiektowe w jeden plik wykonywalny.

Konsolidator rozwiązuje każde wywołanie add, odnajdując jego definicję w math_utils.o.

gcc -c main.c          # -> main.o
gcc -c math_utils.c    # -> math_utils.o
gcc main.o math_utils.o -o app

Cudzysłowy a nawiasy ostre

Składnia dołączania określa ścieżkę wyszukiwania:

  • #include "math_utils.h" najpierw przeszukuje katalog projektu
  • #include <stdio.h> przeszukuje wyłącznie systemowe ścieżki dołączania

Cudzysłowów należy używać dla własnych nagłówków, a nawiasów ostrych dla biblioteki standardowej.

Słowo kluczowe extern

Aby współdzielić zmienną globalną między plikami, należy ją raz zdefiniować w pliku .c, a następnie zadeklarować za pomocą extern w nagłówku.

extern oznacza, że „ta zmienna istnieje gdzie indziej”, i zapobiega wielokrotnemu definiowaniu.

/* in config.h */
extern int g_verbose;   /* declaration */

/* in config.c */
int g_verbose = 0;      /* the single definition */

Słowo kluczowe static

Na poziomie pliku static sprawia, że funkcja lub zmienna jest prywatna dla swojej jednostki translacji.

Pomocniczej funkcji static nie można konsolidować z innych plików, co zapobiega konfliktom nazw i ukrywa szczegóły implementacji. W języku C jest to sposób oznaczania elementów wewnętrznych.

/* visible only inside this .c file */
static int helper(int x) {
    return x * 2;
}

Reguła jednej definicji

Funkcja niestatyczna lub zmienna globalna może być zdefiniowana dokładnie raz w całym programie. Można zadeklarować ją w wielu plikach, ale zdefiniować tylko w jednym.

Dwie definicje add powodują błąd konsolidatora, taki jak multiple definition of 'add'. Dlatego treści funkcji nie umieszcza się w plikach nagłówkowych.

Szybkie sprawdzenie

Zastanów się, co powinno znajdować się w pliku nagłówkowym.

Podsumowanie

Potrafi już Pan/Pani uporządkować projekt składający się z wielu plików:

  • Każdy plik .c jest jednostką translacji kompilowaną niezależnie do pliku .o
  • Pliki nagłówkowe zawierają deklaracje, a każda definicja znajduje się w jednym pliku .c
  • Konsolidator rozwiązuje wywołania między plikami obiektowymi
  • extern udostępnia zmienne globalne, a static zachowuje symbole lokalne dla pliku jako prywatne

Następnie: automatyzacja kompilacji za pomocą plików Makefile.

Często zadawane pytania

Czy lekcja „Projekty wieloplikowe” jest bezpłatna?

Tak — pełny tekst „Projekty wieloplikowe” 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 „Projekty wieloplikowe”?

Pliki nagłówkowe i jednostki translacji Ć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 2 z 4.

Ile czasu zajmuje lekcja „Projekty wieloplikowe”?

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. Kompilacja warunkowa
  2. Projekty wieloplikowe
  3. Makefile
  4. Biblioteki statyczne i współdzielone
← Powrót do C Academy