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ň