Monitiedostoprojektit
Otsakkeet ja käännösyksiköt.
Monitiedostoprojektit on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.
Miksi tiedostot jaetaan
Oikeat ohjelmat eivät sijaitse yhdessä .c-tiedostossa. Koodin jakaminen useisiin tiedostoihin:
- Ryhmittelee toisiinsa liittyvät funktiot
- Antaa kääntäjän kääntää uudelleen vain muuttuneet osat
- Tekee koodista uudelleenkäytettävää eri projekteissa
- Antaa tiimin työskennellä ilman jatkuvia ristiriitoja
On tärkeää ymmärtää, miten osat yhdistetään.
Käännösyksiköt
Jokaisesta .c-tiedostosta tulee #include-sisällytysten laajentamisen jälkeen käännösyksikkö.
Kääntäjä muuntaa jokaisen käännösyksikön itsenäisesti objektitiedostoksi (.o). Tässä vaiheessa se ei tiedä muista tiedostoista.
Esittely ja määrittely
Esittely kertoo kääntäjälle, että funktio on olemassa, sekä ilmoittaa sen allekirjoituksen. Määrittely sisältää varsinaisen rungon.
Muut tiedostot tarvitsevat funktiota kutsuessaan vain esittelyn. Määrittely sijaitsee täsmälleen yhdessä paikassa.
int add(int a, int b); /* declaration: a promise */
int add(int a, int b) { /* definition: the body */
return a + b;
}Otsikkotiedosto
Esittelyt sijoitetaan header-tiedostoon (.h). Jokainen funktiota käyttävä tiedosto sisällyttää tämän otsikkotiedoston.
Otsikkotiedosto on julkinen rajapinta; vastaava .c-tiedosto on yksityinen toteutus.
/* math_utils.h */
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int mul(int a, int b);
#endifToteutustiedosto
.c-tiedosto sisällyttää oman otsikkotiedostonsa ja määrittelee funktiot.
Oman otsikkotiedoston sisällyttäminen antaa kääntäjän tarkistaa, että määrittelyt vastaavat esittelyjä.
/* 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; }Moduulin käyttäminen
Toinen tiedosto sisällyttää otsikkotiedoston ja kutsuu funktioita. Sen ei tarvitse koskaan nähdä funktioiden runkoja.
Kääntäjä luottaa esittelyihin; linkkeri yhdistää kutsut myöhemmin oikeisiin määrittelyihin.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Kääntäminen ja linkitys
Kaksi vaihetta. Käännä ensin jokainen tiedosto objektitiedostoksi valitsimella -c. Linkitä sitten objektit yhdeksi suoritettavaksi tiedostoksi.
Linkkeri ratkaisee jokaisen add-kutsun etsimällä sen määrittelyn tiedostosta math_utils.o.
gcc -c main.c # -> main.o
gcc -c math_utils.c # -> math_utils.o
gcc main.o math_utils.o -o appLainausmerkit ja kulmasulkeet
Sisällytyksen syntaksi määrittää hakupolun:
#include "math_utils.h"etsii ensin projektihakemistosta#include <stdio.h>etsii vain järjestelmän include-polkuista
Käyttäkää lainausmerkkejä omille otsikkotiedostoille ja kulmasulkeita standardikirjastolle.
extern-avainsana
Jakaaksesi globaalin muuttujan tiedostojen kesken määrittele se kerran .c-tiedostossa ja esittele se extern-määritteellä otsikkotiedostossa.
extern kertoo, että ”tämä muuttuja on olemassa jossakin muualla”, ja estää kaksoismäärittelyt.
/* in config.h */
extern int g_verbose; /* declaration */
/* in config.c */
int g_verbose = 0; /* the single definition */static-avainsana
Tiedoston laajuudessa static tekee funktiosta tai muuttujasta yksityisen käännösyksikölleen.
Staattista apufunktiota ei voi linkittää muista tiedostoista, mikä estää nimien törmäykset ja piilottaa toteutuksen yksityiskohdat. C-kielessä sillä merkitään sisäiseen käyttöön tarkoitettuja asioita.
/* visible only inside this .c file */
static int helper(int x) {
return x * 2;
}One Definition Rule -sääntö
Staattiton funktio tai globaali muuttuja voidaan määritellä täsmälleen kerran koko ohjelmassa. Sen voi ilmoittaa monessa tiedostossa, mutta määritelmän tulee olla yhdessä tiedostossa.
add-funktion kaksi määritelmää aiheuttavat linkittäjän virheen, kuten multiple definition of 'add'. Siksi funktioiden runkoja ei sijoiteta otsikkotiedostoihin.
Pikatarkistus
Päätelkää, mikä kuuluu otsikkotiedostoon.
Kertaus
Osaatte nyt jäsentää usean tiedoston projektin:
- Jokainen
.c-tiedosto on käännösyksikkö, joka käännetään itsenäisesti.o-tiedostoksi - Otsikkotiedostot sisältävät esittelyt; kunkin määritelmän sisältää yksi
.c-tiedosto - Linkittäjä ratkaisee objektitiedostojen väliset kutsut
externjakaa globaalit muuttujat;staticpitää tiedostokohtaiset symbolit yksityisinä
Seuraavaksi automatisoidaan koonti Makefile-tiedostoilla.
Opi C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 144
Usein kysytyt kysymykset
Onko oppitunti ”Monitiedostoprojektit” ilmainen?
Kyllä – oppitunnin ”Monitiedostoprojektit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Monitiedostoprojektit”?
Otsakkeet ja käännösyksiköt. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Monitiedostoprojektit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?
Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Ehdollinen käännös
- Monitiedostoprojektit
- Makefile-tiedostot
- Staattiset ja jaetut kirjastot