Berkas Header dan Sumber
Pisahkan deklarasi dan kode.
Berkas Header dan Sumber adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 1 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 Kode Dipisahkan Menjadi Beberapa Berkas?
Seiring bertambah besarnya program C, menyimpan semuanya dalam satu berkas .c menjadi sulit dibaca dan memperlambat kompilasi.
C memungkinkan Anda membagi proyek menjadi beberapa berkas: masing-masing menangani satu hal. Hal ini memperbaiki organisasi, memungkinkan penggunaan ulang kode, dan berarti perubahan pada satu bagian tidak memaksa Anda mengompilasi ulang semuanya.
Dua Jenis Berkas
Proyek C modular menggunakan dua jenis berkas.
Berkas sumber (.c) berisi implementasi sebenarnya: badan fungsi dan definisi.
Berkas header (.h) berisi deklarasi: prototipe fungsi, definisi tipe, dan makro yang perlu diketahui oleh berkas lain.
Berkas Header
Header mendeklarasikan apa yang ada tanpa menjelaskan bagaimana cara kerjanya.
Di sini math_utils.h mendeklarasikan fungsi add. Setiap berkas yang menyertakan header ini mengetahui tanda tangan fungsi tersebut dan dapat memanggilnya.
/* math_utils.h */
int add(int a, int b);Berkas Sumber yang Sesuai
Berkas sumber menyediakan implementasi. Berkas ini menyertakan header-nya sendiri agar kompilator dapat memeriksa bahwa definisinya sesuai dengan deklarasi.
Perhatikan bahwa header disertakan dengan tanda kutip, yang digunakan untuk berkas proyek Anda sendiri.
/* math_utils.c */
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}Menggunakan Modul
Sekarang main.c menyertakan header dan memanggil add. Berkas ini tidak pernah melihat badan fungsi, hanya prototipenya.
Kompilator mempercayai deklarasi tersebut; kemudian penghubung menghubungkan pemanggilan itu dengan implementasi sebenarnya di math_utils.c.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Tanda Kutip vs Kurung Sudut
Direktif #include memiliki dua bentuk.
#include <stdio.h> menggunakan kurung sudut untuk header sistem dan pustaka standar. Kompilator mencari di jalur penyertaan standarnya.
#include "math_utils.h" menggunakan tanda kutip untuk header Anda sendiri, yang pertama kali dicari di direktori saat ini.
#include <stdio.h> /* standard library */
#include "math_utils.h" /* your project */Hal yang Seharusnya Ada di Header
Letakkan deklarasi di dalam header, bukan definisi.
Isi header yang baik meliputi prototipe fungsi, deklarasi struct dan typedef, makro #define, serta deklarasi variabel extern.
Hindari meletakkan badan fungsi atau definisi variabel di sana karena hal itu dapat menyebabkan kesalahan simbol ganda.
/* shapes.h */
typedef struct {
double width;
double height;
} Rect;
double rect_area(Rect r);Hal yang Seharusnya Ada di Berkas Sumber
Berkas sumber menyimpan pekerjaan sebenarnya: definisi fungsi dan pembantu privat berkas tersebut.
Berkas ini menyertakan header yang sesuai agar kompilator memverifikasi bahwa tanda tangan fungsi cocok. Hal ini mendeteksi ketidaksesuaian lebih awal, bukan saat pengaitan.
/* shapes.c */
#include "shapes.h"
double rect_area(Rect r) {
return r.width * r.height;
}Deklarasi vs Definisi
Perbedaan ini merupakan dasar C modular.
Deklarasi memberi tahu kompilator tipe dan tanda tangan suatu nama agar nama tersebut dapat digunakan: int add(int, int);
Definisi membuat entitas sebenarnya, dengan menyediakan penyimpanan atau badan fungsi. Header mendeklarasikan; berkas sumber mendefinisikan.
int add(int a, int b); /* declaration */
int add(int a, int b) { /* definition */
return a + b;
}Konvensi Penamaan
Pola yang umum memasangkan setiap modul berdasarkan nama: logger.h dengan logger.c, parser.h dengan parser.c.
Hal ini memperjelas lokasi implementasi. Kelompokkan fungsi yang berkaitan ke dalam satu modul agar setiap berkas memiliki satu tanggung jawab yang jelas.
/* logger.h */
void log_info(const char *msg);
void log_error(const char *msg);Gambaran Proses Build
Setiap berkas .c dikompilasi secara terpisah menjadi berkas objek, lalu semua objek ditautkan menjadi satu program.
Header tidak dikompilasi sendiri; teksnya disisipkan ke dalam berkas sumber yang menyertakannya. Kita akan membahas seluruh alur build dalam pelajaran berikutnya.
gcc -c main.c /* -> main.o */
gcc -c math_utils.c /* -> math_utils.o */
gcc main.o math_utils.o -o appPemeriksaan Singkat
Uji pemahaman Anda tentang peran header dan berkas sumber.
Ringkasan
Anda telah mempelajari cara membagi proyek C menjadi header .h dan berkas sumber .c.
Header mendeklarasikan apa yang ada; berkas sumber mendefinisikan cara kerjanya. Gunakan tanda kutip untuk header Anda sendiri dan kurung sudut untuk header standar.
Selanjutnya kita akan mencegah masalah yang disebabkan oleh penyertaan header lebih dari satu kali.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Berkas Header dan Sumber” gratis?
Ya — teks lengkap “Berkas Header dan Sumber” 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 “Berkas Header dan Sumber”?
Pisahkan deklarasi dan kode. 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 1 dari 4.
Berapa lama pelajaran “Berkas Header dan Sumber” 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
- Berkas Header dan Sumber
- Penjaga Penyertaan
- extern dan Penautan
- Mengompilasi Banyak Berkas