14. 6. 2018 Forst - uprava zdrojaku c

Seznámení se základními principy operačního systému UNIX, převážně z uživatelského hlediska. Absolvent kurzu by měl být schopen napsat netriviální program v shellu.
existence
Matfyz(ák|ačka) level I
Příspěvky: 2
Registrován: 1. 6. 2018 12:50
Typ studia: Informatika Bc.

14. 6. 2018 Forst - uprava zdrojaku c

Příspěvek od existence »

Byl zadán úkol převést deklarace funkcí ve zdrojovém kódu céčka z "ANSI standardu" do "Kernighan-Ritchie standardu"

V parametrech scriptu jsou soubory/adresáře a my je chceme všechny upravit z jednoho standardu do druhého, je-li zadán adresář, tak (nerekurzivně) všechny soubory v něm s příponami .c a .h

Tedy šlo o následující úpravy:

DEKLARACE:
1)
[ANSI - zdroj] typ identifikátor(void);
[K.R. - cíl] typ identifikátor();
když funkce 'identifikátor' typu 'typ' nebere žádné parametry

2)
[ANSI] typ identifikátor(typ id1, typ id2, typ id3,...);
[K.R.] typ identifikátor(typ,typ,typ,...);
tedy v K.R. specifikaci chceme v deklaraci smazat názvy parametrů

1,2) dohromady: prostě pri převodu na K.R. specifikaci chceme smazat názvy (jen zachovat typy) a odebrat vycpávkový "void" u funkce bez parametrů. Prý můžeme předpokládat, že deklarace funkce je vždy na jednom řádku a vždy ukončena středníkem (a je na řádku samotná)
ALE: c dovoluje víceslovné typy (identifikátor je prostě poslední slovo před závorkou, popř. před čárkou, když je to id parametru) - na to pozor

DEFINICE:
1)
[ANSI] typ identifikátor(typ id1, typ id2, typ id3,...)
[K.R.] typ identifikátor(id1,id2,id3)
typ id1;
typ id2;
typ id3;
{
tady bylo, že definici poznáme tím, že za ní nemáme středník (ale může tam být složená závorka). Pak v závorkách ve specifikaci, na kterou upravujeme, nechceme mít typy parametrů a chceme je až na nových řádcích, jako bychom deklarovali normální proměnné. A až pak se píše složená závorka.
Takže zjednodušeně: zjistit, jestli je na daným řádku definovaná/deklarovaná funkce a pokud ano, tak ji drobně upravit



Dál ale c má tzv. hlavičkové soubory poznačené v kódu stylem: #include "nazevsouboru"
a právě ty chceme při úpravách našeho souboru upravit také a to rekurzivně (a prý si musíme dávat pozor na nekonečné cykly, což prý třeba některé knihovny dělaj, že se navzájem mají v hlavičce), takže je fajn si třeba nějak pamatovat, jaké soubory jsme už upravovali - a taky u těchto "inklůdů" musíme kontrolovat zapisovací a čtecí právo.

U těchhle "inklůdů" navíc prý musíme kontrolovat, jestli je "nazevsouboru" relativní či absolutní cesta (když začíná lomenem) a v případě relativní cesty je relativní vůči souboru, kde je "inklůdován", ne vůči našemu scriptu!!!


takže souhrn:
0) vzít parametry scriptu a začít upravovat zadané soubory nebo soubory s příponami .c a .h v zadaných adresářích
1) přepsat deklarace funkcí
2) přepsat definice funkcí
3) projet strom #include a na něm opakovat (v include nemůže být adresář)

Tohle bylo k zadání asi všechno, co nám řekl/napsal na tabuli.



Řešení bylo nejjednodušší přes AWK, popř. (prý prestižněji) přes SED.
Odpovědět

Zpět na „SWI095 Úvod do UNIXu“