Több modul CodeBlocks-ban

Czirkos Zoltán · 2023.10.18.

Lépésről lépésre útmutató több modulos programok létrehozásához a CodeBlocks fejlesztőkörnyezetben.

Ha még előadáson nem volt szó róla, hogy miért szoktuk több forrásfájlra, azaz modulra bontani a programjainkat, akkor érdemes előbb a több modulra bontásról szóló írást elolvasni.

Példaként induljunk ki az alábbi mini-projektből! Tegyük fel, hogy a kód main.c néven van elmentve:

main.c
#include <stdio.h>

void hello(char const *ki) {
    printf("Hello, %s!\n", ki);
}

int main(void) {
    hello("vilag");
    return 0;
}

Ezt szeretnénk két forrásfájlra bontani, a main.c-re és a hello.c-re, amelyek a main(), illetve a hello() függvényt tartalmazzák.

Forrásfájlt és fejlécfájlt a Code::Blocks-ban az alábbi lépésekkel lehet hozzáadni a projekthez.

Aktív projekt kiválasztása

Válaszd ki aktívnak a projektedet, ha esetleg több projekt van nyitva. Ehhez a projekt nevére kattints a jobb gombbal, és a menüből Activate project.

Fájlok hozzáadása

A fenti menüből File, New, File pontot kell kiválasztani, a fájl típusának pedig a C/C++ source-t (forrásfájlhoz) vagy a C/C++ header-t. A nyelv legyen C. A következő ablakban be kell állítani a fájl elérési útját és nevét. Ez lehet például hello.c (hello.h), de a programodban nevezd el ezeket szerepük, tartalmuk szerint!

Ugyanabba a mappába kell őket tenni, mint a projekt többi fájljának a helye. Jelezni kell azt is, hogy az ebből a forrásfájlból keletkező tárgykódot a futtatható .exe-hez kell majd linkelni, ezért be kell pipálni az „Add file to active project in build targets” résznél mindent:

Fejlécfájl esetén a Code::Blocks automatikusan létrehozza az ún. include guard-okat, amelyek a többszörös beillesztés ellen védenek. (Ettől függetlenül ilyet tudni kell írni ZH-n.)

A kódrészletek átrendezése

A hello() függvény új helye a hello.c forrásfájl lesz. Így azt a függvényt át kell tenni a hello.c-be:

#include <stdio.h>

void hello(char const *ki) {
    printf("Hello, %s!\n", ki);
}

A függvény deklarációja a hello.h-ba megy:

void hello(char const *ki);

Ha lennének olyan típusdefiníciók, amelyeket mindkét modul használ, akkor azokat is a fejlécfájlba kellene tenni, ahogyan az előadáson is szerepelt.

A main.c-ben pedig csak a főprogram marad:

#include <stdio.h>
#include "hello.h"

int main(void) {
    hello("vilag");
    return 0;
}

A fejlécfájlok beillesztése

A main.c-ben és a hello.c-ben is be kell illeszteni ezt a fejlécfájlt. Ezt tedd is meg:

#include "hello.h"

Így mindkét forrásfájl lefordításakor látja a fordító a függvény deklarációját.

Áttekintés

A három modul fájlja így néz most ki:

main.c
#include "hello.h"

int main(void) {
    hello("vilag");
    return 0;
}
hello.h
#ifndef HELLO_H_INCLUDED
#define HELLO_H_INCLUDED

void hello(char const *ki);

#endif
hello.c
#include <stdio.h>
#include "hello.h"

void hello(char const *ki) {
    printf("Hello, %s!\n", ki);
}

Ezzel a kettő modulra bontás kész – ha több modul lenne, azoknál ugyanígy kell csinálni. A nagy házi feltöltéséhez ezek a fájlok kellenek. Ne feledd, hogy a CodeBlocks projekt fájl nem tartalmaz forráskódot, hanem csak a CodeBlocks beállításait.