Udelat skript chkform, ktery jako argument dostane jmeno ceckoveho zdrojaku. Ukolem je zkontrolovat, jestli uzivatel napsal vsechny printf a podobne funkce se spravnym poctem parametru, a jestli jsou spravneho typu. Seznam tech funkci, ktere mate hlidat, mate v konfiguracnim souboru, ktery vypada takto:
myprintf 3
dalsifunkce 0
ajestejedna 1
Cislo udava, kolik argumentu ma funkce jeste pred formatovacim retezcem. Jak to melo probihat - pokud jsem narazil na funkci kterou mam ohlidat, tak jsem musel kouknout do formatovaciho retezce a hlidat tyto sekvence:
%d, %g, %s, %*d, %*g, %*s a pak jeste direktivy tvaru %<cislo><typ>. Pokud nevite co znamena ta hvezdicka (jako treba ja ), tak to znamena, ze tato direktiva negeneruje jeden parametr prislusneho typu (int/float/char *), ale jeste jeden integer, ktery udava sirku vystupu.
Cili spravne volani:
Kód: Vybrat vše
myprintf("Blabla %s %*d", "neco", delka, cislo);
Z kodu
Kód: Vybrat vše
myprintf("Blabla %s %*d", "neco", delka, cislo);
Kód: Vybrat vše
__myprintf__sdd("neco", delka, cislo);
Kód: Vybrat vše
myprintf(neco, dalsi, jeste, posledni, "Blabla %s %*d", "neco", delka, cislo);
Jak jiste tusite, cilem bylo, abychom predlozili prekladaci zdrojak v takove forme, kdy uz nam dokaze rict, ze pocet parametru/jejich typ je spatne. K tomu je ovsem jeste treba vygenerovat deklarace funkci.
Takze dalsi vec co musel skript vypsat (nekam do jineho souboru, ktery se do toho zdrojaku potom naincludoval)
Kód: Vybrat vše
void __myprintf__sdd(char *, int, int);
- funkce muze byt roztazena pres vic radku
- retezec muze vypadat i takhle:
"afasdad" "adsad"
- pozor na \", %%, \\ apod. v retezcich
Snad jsem na nic nezapomnel.
Bylo nas tam 17,
2 tusim odesli behem pisemky,
2 to dostali rovnou
4 sli na ustni
zbytek to nedostal.