Proyek Banyak File
Header dan unit translasi.
Proyek Banyak File adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.
Mengapa Memisahkan Berkas
Program nyata tidak berada dalam satu berkas .c. Memisahkan kode ke dalam beberapa berkas:
- Mengelompokkan fungsi yang berkaitan
- Memungkinkan compiler membangun ulang hanya bagian yang berubah
- Membuat kode dapat digunakan kembali di berbagai proyek
- Memungkinkan tim bekerja tanpa konflik terus-menerus
Memahami cara bagian-bagian tersebut ditautkan sangatlah penting.
Unit Terjemahan
Setiap berkas .c, setelah prapemroses mengembangkan #include-nya, menjadi sebuah unit terjemahan.
Compiler mengubah setiap unit terjemahan menjadi berkas objek (.o) secara independen. Pada tahap ini, compiler belum mengetahui berkas lain.
Deklarasi vs Definisi
Deklarasi memberi tahu compiler bahwa sebuah fungsi ada beserta tanda tangannya. Definisi menyediakan isi fungsi yang sebenarnya.
Berkas lain hanya memerlukan deklarasi untuk memanggil fungsi. Definisi berada tepat di satu tempat.
int add(int a, int b); /* declaration: a promise */
int add(int a, int b) { /* definition: the body */
return a + b;
}Berkas Header
Deklarasi ditempatkan dalam header (.h). Setiap berkas yang ingin menggunakan fungsi tersebut menyertakan header itu.
Header adalah antarmuka publik; berkas .c yang sesuai merupakan implementasi privatnya.
/* math_utils.h */
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int mul(int a, int b);
#endifBerkas Implementasi
Berkas .c menyertakan header-nya sendiri dan mendefinisikan fungsi-fungsinya.
Menyertakan header sendiri memungkinkan compiler memverifikasi bahwa definisi sesuai dengan deklarasinya.
/* 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; }Menggunakan Modul
Berkas lain menyertakan header dan memanggil fungsi-fungsinya. Berkas tersebut tidak perlu melihat isi fungsi.
Compiler mempercayai deklarasi; penaut akan menghubungkan pemanggilan dengan definisi sebenarnya nanti.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Kompilasi dan Penautan
Dua tahap. Pertama, kompilasikan setiap berkas menjadi berkas objek dengan -c. Kemudian tautkan objek-objek tersebut menjadi satu berkas eksekusi.
Penaut menyelesaikan setiap pemanggilan ke add dengan menemukan definisinya di math_utils.o.
gcc -c main.c # -> main.o
gcc -c math_utils.c # -> math_utils.o
gcc main.o math_utils.o -o appTanda Kutip vs Kurung Siku
Sintaks include mengendalikan jalur pencarian:
#include "math_utils.h"mencari direktori proyek Anda terlebih dahulu#include <stdio.h>hanya mencari jalur include sistem
Gunakan tanda kutip untuk header milik Anda dan kurung siku untuk pustaka standar.
Kata Kunci extern
Untuk membagikan variabel global di antara berkas, definisikan variabel tersebut sekali dalam sebuah berkas .c dan deklarasikan dengan extern di dalam header.
extern berarti 'variabel ini ada di tempat lain', sehingga definisi ganda dapat dihindari.
/* in config.h */
extern int g_verbose; /* declaration */
/* in config.c */
int g_verbose = 0; /* the single definition */Kata Kunci static
Pada lingkup berkas, static menjadikan fungsi atau variabel privat bagi unit terjemahannya.
Pembantu statis tidak dapat ditautkan dari berkas lain, sehingga mencegah bentrokan nama dan menyembunyikan detail implementasi. Inilah cara C menandai sesuatu sebagai internal.
/* visible only inside this .c file */
static int helper(int x) {
return x * 2;
}Aturan Satu Definisi
Fungsi non-statis atau global boleh didefinisikan tepat satu kali di seluruh program. Deklarasikan di banyak berkas, tetapi definisikan di satu berkas.
Dua definisi add menghasilkan galat penaut seperti multiple definition of 'add'. Inilah alasan isi fungsi tidak diletakkan di berkas header.
Pemeriksaan Singkat
Jelaskan apa yang seharusnya berada di dalam berkas header.
Rangkuman
Sekarang Anda dapat menyusun proyek yang terdiri dari beberapa berkas:
- Setiap
.cadalah unit terjemahan yang dikompilasi menjadi.osecara terpisah - Berkas header berisi deklarasi; satu
.cberisi setiap definisi - Penaut menyelesaikan pemanggilan di antara berkas objek
externmembagikan variabel global;staticmenjaga simbol lokal berkas tetap privat
Berikutnya: mengotomatiskan pembangunan dengan Makefile.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Proyek Banyak File” gratis?
Ya — teks lengkap “Proyek Banyak File” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Proyek Banyak File”?
Header dan unit translasi. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C Academy?
Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Proyek Banyak File” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kompilasi Kondisional
- Proyek Banyak File
- Makefile
- Pustaka Statis dan Bersama