Projek Berbilang Fail
Pengepala dan unit terjemahan
Projek Berbilang Fail ialah pelajaran C Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C Academy merangkumi sejumlah 4 pelajaran.
Mengapa Memisahkan Fail
Program sebenar tidak berada dalam satu fail .c. Memisahkan kod kepada berbilang fail:
- Mengumpulkan fungsi yang berkaitan
- Membolehkan pengkompil membina semula hanya perkara yang berubah
- Menjadikan kod boleh digunakan semula merentas projek
- Membolehkan pasukan bekerja tanpa konflik berterusan
Memahami cara bahagian-bahagian ini dipautkan amat penting.
Unit Terjemahan
Setiap fail .c, selepas prapemproses mengembangkan #includenya, menjadi satu unit terjemahan.
Pengkompil menukarkan setiap unit terjemahan kepada fail objek (.o) secara berasingan. Pada peringkat ini, pengkompil tidak mengetahui fail lain.
Pengisytiharan berbanding Takrifan
Pengisytiharan memberitahu pengkompil bahawa sesuatu fungsi wujud serta tandatangannya. Takrifan menyediakan isi sebenar fungsi itu.
Fail lain hanya memerlukan pengisytiharan untuk memanggil fungsi. Takrifan 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;
}Fail Pengepala
Pengisytiharan diletakkan dalam pengepala (.h). Mana-mana fail yang mahu menggunakan fungsi tersebut perlu memasukkan pengepala itu.
Pengepala ialah antara muka awam; fail .c yang sepadan ialah pelaksanaan peribadi.
/* math_utils.h */
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int mul(int a, int b);
#endifFail Pelaksanaan
Fail .c memasukkan pengepalanya sendiri dan mentakrifkan fungsi-fungsi tersebut.
Memasukkan pengepala sendiri membolehkan pengkompil mengesahkan bahawa takrifan sepadan dengan pengisytiharan.
/* 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
Fail lain memasukkan pengepala dan memanggil fungsi-fungsi tersebut. Fail itu tidak perlu melihat isi fungsi.
Pengkompil mempercayai pengisytiharan; pemaut akan menyambungkan panggilan kepada takrifan sebenar kemudian.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Menyusun dan Memautkan
Dua fasa. Mula-mula susun setiap fail menjadi fail objek dengan -c. Kemudian pautkan objek-objek tersebut menjadi satu fail boleh laku.
Pemaut menyelesaikan setiap panggilan kepada add dengan mencari takrifannya dalam math_utils.o.
gcc -c main.c # -> main.o
gcc -c math_utils.c # -> math_utils.o
gcc main.o math_utils.o -o appPetikan berbanding Kurungan Sudut
Sintaks kemasukan mengawal laluan carian:
#include "math_utils.h"mencari direktori projek Anda terlebih dahulu#include <stdio.h>hanya mencari laluan kemasukan sistem
Gunakan petikan untuk pengepala sendiri dan kurungan sudut untuk pustaka standard.
Kata Kunci extern
Untuk berkongsi pemboleh ubah global merentas fail, takrifkan pemboleh ubah itu sekali dalam fail .c dan isytiharkannya dengan extern dalam pengepala.
extern bermaksud 'pemboleh ubah ini wujud di tempat lain', sekali gus mengelakkan takrifan pendua.
/* in config.h */
extern int g_verbose; /* declaration */
/* in config.c */
int g_verbose = 0; /* the single definition */Kata Kunci static
Pada skop fail, static menjadikan fungsi atau pemboleh ubah peribadi kepada unit terjemahannya.
Pembantu statik tidak boleh dipautkan dari fail lain, lalu menghalang pertembungan nama dan menyembunyikan butiran pelaksanaan. Inilah cara C menandakan sesuatu sebagai dalaman.
/* visible only inside this .c file */
static int helper(int x) {
return x * 2;
}Peraturan Satu Definisi
Fungsi bukan statik atau pemboleh ubah global boleh ditakrifkan tepat sekali dalam keseluruhan atur cara. Isytiharkannya dalam banyak fail, tetapi takrifkan dalam satu fail sahaja.
Dua takrifan bagi add menghasilkan ralat pemaut seperti multiple definition of 'add'. Sebab itulah badan fungsi tidak diletakkan dalam fail pengepala.
Semakan Pantas
Fikirkan perkara yang patut diletakkan dalam fail pengepala.
Rumusan
Sekarang Anda boleh menstrukturkan projek yang terdiri daripada beberapa fail:
- Setiap
.cialah unit terjemahan yang dikompil secara berasingan menjadi.o - Fail pengepala menyimpan pengisytiharan; satu
.cmenyimpan setiap takrifan - Pemaut menyelesaikan panggilan merentas fail objek
externberkongsi pemboleh ubah global;staticmengekalkan simbol setempat fail sebagai persendirian
Seterusnya: mengautomatikkan binaan dengan Makefile.
Pelajari C dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 144
Soalan Lazim
Adakah pelajaran “Projek Berbilang Fail” percuma?
Ya — teks penuh “Projek Berbilang Fail” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus C Academy, tingkat taraf kepada CoddyKit PRO. Kursus C Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Projek Berbilang Fail”?
Pengepala dan unit terjemahan Anda berlatih C Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Projek Berbilang Fail” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Penyusunan Bersyarat
- Projek Berbilang Fail
- Makefiles
- Pustaka Statik dan Dikongsi