C Academy · Pelajaran

Projek Berbilang Fail

Pengepala dan unit terjemahan

Pelajaran 2 daripada 413 langkah

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);

#endif

Fail 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 app

Petikan 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 .c ialah unit terjemahan yang dikompil secara berasingan menjadi .o
  • Fail pengepala menyimpan pengisytiharan; satu .c menyimpan setiap takrifan
  • Pemaut menyelesaikan panggilan merentas fail objek
  • extern berkongsi pemboleh ubah global; static mengekalkan simbol setempat fail sebagai persendirian

Seterusnya: mengautomatikkan binaan dengan Makefile.

Percuma untuk bermula

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

  1. Penyusunan Bersyarat
  2. Projek Berbilang Fail
  3. Makefiles
  4. Pustaka Statik dan Dikongsi
← Kembali ke C Academy