You are on page 1of 6

A 7.

laboratórium anyaga

1. Írjon olyan makrót, amely egy stringet vesz át, amit úgy ı́r ki a képernyőre, hogy előtte megjelenı́ti
a fájl nevét és a sor számát, ahol szerepelt.

Tipp:
– Használja fel a FILE és a LINE makrókat, amelyek közül az előbbi helyére
egy sztring, az utóbbi helyére egy egész szám helyettesı́tődik be.
– Egy ilyen makrót jól lehet használni egy programban való hibakereséséhez. Ilyen
kiı́ratásokkal meg lehet állapı́tani, hogy hol járt a program, amikor hibaüzenettel
leállt a futása. Azért is hasznos, mert könnyebb kitörölni a hı́vásait, mint egy
mezei kiı́ratásét, amelyek egy része a program funkcionális eleme.

2. Írjon függvényt, amely egy egész számokból álló tömböt és egy egész számot vesz át
paraméterként. A függvény keresse meg az átvett számot a tömbben és adja vissza a megtalálás
indexét. Ha a szám nem szerepelt a tömbben, akkor adjon vissza -1-et.
A függvény minden egyes meghı́vásakor a soron következő megtalálás pozı́cióját adja vissza.
Tehát ha a szám többször szerepel az adott tömbben, akkor első hı́váskor az első, második
hı́váskor a második előfordulás indexét adja vissza és ı́gy tovább. Az utolsó elem után -1-gyel
térjen vissza.

Példa: ha a tömb a következő: {1, 2, 3, 2, 5, 7, 2, 4} és a keresett szám a 2,


akkor:
keres(2, t, meret); // visszatérés: 1
keres(2, t, meret); // visszatérés: 3
keres(2, t, meret); // visszatérés: 6
keres(2, t, meret); // visszatérés: -1

Tipp: használjon static változót az index nyilvántartására.

3. Fejlessze tovább a keres() függvényt úgy, hogy ha egy másik tömbre hı́vják meg, akkor ott ne
az előző tömb utolsó találati indexétől kezdjen keresni, hanem a tömb elejétől.

Tipp: ez egy újabb static változó bevezetését jelenti, amely a tömb cı́mét tárolja.

4. Írjon példaprogramot a fenti függvény tesztelésére és használja benne az első feladatban megı́rt
makrót az egyes hı́vásokhoz tartozó kiı́ratások elkülönı́tésére.

5. A kész programját válassza szét három állományra úgy, hogy a függvény definı́ciója kerüljön
egy fejlécfájlba, a deklarációja egy – lehetőleg azonos nevű – forrásfájlba, a tesztkód a main
függvénnyel pedig egy külön forrásfájlban legyen.

1
Tipp:
– Ne felejtsen el a fejlécfájlhoz állomány őrszemet ı́rni – ez olyan makródefinı́ció,
amelynek a segı́tségével meggátolható, hogy egy fájl többször legyen beszer-
kesztve és ı́gy esetlegesen gondokat okozzon a fordı́tásnál egy megismételt
deklaráció.
– Visual Studioban, ha a projekthez hozzáad egy új állományt, akkor az au-
tomatikusan bekerül a fordı́tandó állományok közé, ı́gy nem kell törődnie azzal,
hogy a több elkészülő tárgykódú állomány összeszerkesztése miként történjen.
– GCC-vel a következő módon fordı́that több állományt:
gcc main.c keres.c -o kereso

6. Készı́tsen a függvényt tartalmazó állományokból egy statikus könyvtárat!

Tipp:
– Visual Studioban készı́tsen egy új projektet, amely csak a függvényt tartal-
mazó fejléc- és forrásállományt tartalmazza. A projekt tı́pusa Win32 Console
Application legyen. A projekt beállı́tó ablakában (Application settings)
válassza ki a Static library menüpontot. Ügyeljen arra, hogy a Precompiled
header pont ne legyen kiválasztva.
Az ı́gy fordı́tott projekt végterméke nem egy futtatható állomány, hanem egy
.lib kiterjesztésű könyvtár. Ez a projekten belül a Debug vagy a Release
alkönyvtárakban található attól függően, hogy milyen módban fordı́tott. A
Debug mód a nyomkövetéshez (hibakereséshez) szükséges információkat bele-
fordı́tja a tárgykódba, mı́g a Release – publikálható változat – ezektől mentes,
rövidebb és optimalizált változatot készı́t.
– GCC-vel ez a következő lépésekben történhet:
(i) Fordı́tson úgy, hogy csak tárgykód készüljön el:
gcc -c keres.c -o keres.o
(ii) Tömörı́tse az állományt és nevezze el úgy, hogy a lib szócskával kezdődjön
a fájlnév:
ar rcs libkeres.a keres.o

7. Tesztelje a könyvtárat! Linkelje hozzá a projektjéhez, amely forrásfájlként csak a main függvényt
tartalmazó állományt tartalmazza és futtassa a programot ı́gy!

Tipp:
– Visual Studioban készı́tsen egy új projektet, amibe tegye be a main függvényt
tartalmazó forrásállomány és a könyvtárhoz tartozó fejlécállomány (keres.h)
legyen benne. A könyvtárat a projekt tulajdonságainál (Properties) tudja
hozzárendelni a projekthez. Ehhez a Solution Explorer ablakban jobbklikkel-
jen, majd a felbukkanó menüben válassza ki a Properties pontot. A felugró
ablakban a Linker/General pontban az Additional Library Directories
mezőben adja meg a könyvtár elérési útvonalát. Továbbá a Linker/Input
pontban a Additional Dependencies mezőbe ı́rja be a könyvtár nevét (pl.
keres.lib).
– GCC-vel úgy kell fordı́tani, hogy megadjuk a könyvtár nevét a -l. Amennyiben
a fájl nem egy olyan elérési útvonalon van, amelyet a fordı́tó használ, akkor
meg kell adni ezt is. Ehhez a -L kapcsolót használhatja. Itt megadhat relatı́v és
abszolút elérési utat is, sőt egyszerűen az aktuális könyvtárat is a . segı́tségével.
gcc main.c -L. -lkeres -o kereso

8. Bővı́tse a könyvtárát úgy, hogy legyen benne egy függvény, amelynek segı́tségével, a keres()-hez
hasonlóan, egy karakter előfordulásait lehet kigyűjteni egy stringből.

2
9. Bővı́tse tovább a könyvtárát egy olyan függvénnyel, ami egy stringben egy szó előfordulásait
adja vissza az fentiekhez hasonló módon.

3
Függelék

Projekt megnyitása

Projekt tı́pusának megadása

Az alkalmazás tı́pusának beállı́tása

4
Fájl hozzáadása a projekthez

A projekt tulajdonságainak beállı́tása

A könyvtár elérési útjának megadása

5
A könyvtár nevének megadása