lclint -=-=-=-= Thus spake the master programmer: "When you have learned to snatch the error code from the trap frame, it will be time for you to leave." -- Geoffrey James, "The Tao of Programming" Zcela jiným přístupem jsou programy typu lint. Lint má klasicky za úkol zkontrolovat syntax programu bez nutnosti použít opravdový překladač. Lint většinou pracuje mnohem rychleji a detekuje mnohem více warningů zejména co se týče portability programu, standardů a dalších fines. Dlouho chyběla free implementace podobného programu, protože gcc -Wall udělá většinu jeho práce. Lclint toho ale umí přece jenom víc. Překvapením pro mne bylo, že dokonce dokáže kontrolovat nejčastější chyby při práci s pamětí a najde chyby v mých testech. Samořejmě, že najde pouze poměrně zjevné chyby. Trochu zkušený programátor snadno napíše program tak, že žádný podobný program nebude mít šanci chybu odhalit (podobně jako sám programátor). Lclint má také tendenci k planým poplachům a nejde stovky chyb i v programu, kde žádné takové chyby nejsou. Na mých šestiřádkových testech dokázal někdy najít i stránku a půl nedostatků. U delšího programu je pak takový výpis zcela nepoužitelný, protože je často o dost větší než vlastní program. Pravděpodobně pokud lclint používáte systematicky od začátku, taková situace nenastane. Lclint umožňuje do programu přidávat anotace ve formátu speciálních komentářů, které zabrání planým poplachům a umožní další testy. Můžete určit, kdy ukazatele nemůžou být NULL, které parametry nejsou použity, co by se měnit mělo, co by zase nemělo apod. Pokud do programu přidáte takové "smetí", lclint asi najde i mnoho užitečných nedostatků. Jednou až se zase pustím do nějakého nového většího programu, asi to zkusím. A nakonec výsledky: Chyby pro použití haldy zapomenuté naalokované bloky paměti Fresh storage c not released before return uvolnění nenaalokovaného bloku vícenásobné uvolnění bloku Dead storage c passed as out parameter: c alokace a realokace bloku o velikosti 0 Index of possibly null pointer c: c použití paměti bez testu na selhání malloc Index of possibly null pointer c: c Chyby pro použití ukazatelů použití uvolněného bloku pro zápis Variable c used after being released použití uvolněného bloku pro čtení Variable c used after being released zápis za koncem pole v zásobníku zápis za koncem alokovaného bloku čtení za koncem alokovaného bloku zápis daleko za koncem alokovaného bloku zápis před koncem alokovaného bloku čtení před koncem alokovaného bloku čtení neinicalizované paměti Array element c[3] used before definition Zdrojové kódy najdete na: sunsite.ms.mff.cuni.cz/pub/Linux/devel/lang/c výheň