5.62   ERROR - 60 - LIMIT: no more memory
Uz ziadna pamat.Kompilator vyuziva priesor medzi svojim  zaciat-
kom a koncom pamate (RAMTOP) na ukladanie mnohych  veci.Drzi  sa
tu editovany text, kompilovany strojovy  kod  Vasho  programu  a
text chybovych hlaseni,pracovny  priestor  pre  kompilator.Tento
priestor je teraz uplne plny.Mozte ho trochu uvolnit  niekolkymi
sposobmi:
- pouzite #error riadok na zrusenie chybovych hlaseni
- nahrajte svoj program na pasku (microdrive) atd a pouzite #in-
  clude file
- skompilujte cely program a zbehnite ho,namiesto pouzitia
  #direct+
- zjednoduste program
5.63   ERROR - 61 - RESTRICTION: use  assignment  or  move()  to
       initialize automatics
Kompilator nema inicializaciu  automatickych  lokalnych  premen-
nych.Namiesto toho by ste  mali  jednoducho  pouzit  priradovaci
prikaz. Uvedomte si,ze mozte inicializovat staticke lokalne pre-
menne a tie by sa mali vyuzivat prednostne miesto automatickych,
okrem   rekurzivnych    a    reentrantnych    funkcii.Aby    ste
inicializovali velke objekty,ako polia, mozte tiez vytvorit sta-
ticke pole s potrebnymi datami a potom pouzit zabudovanu funkciu
move(),aby ste skopirovali data do  automatickej  premennej.Uve-
domte si,ze v C nemozte inicializovat automaticke polia  a  toto
nieje,"RESTRICTION".
Prve nestastia,havarie a ako ich hladat:
 1. Pri pouziti indexu pola s  chybnym  popisom  a  ulozenim  do
lubovolneho  miesta  pamati.   Treba    poznamenat,  ze  C  nema
kontrolu popisu.
 2. Oznacenie chybnej hodnoty ukazovatela a potom jeho  pouzitie
na ulozenie hodnoty do pamati; alebo zvysenie ukazovatela mimo
oblast, na ktoru by mohol ukazovat. Velmi podobne  chybam  pola.
Hisoft-C skusa predchadzat niektorym chybam kladenim  dorazu  na
spravne typy.
 3. Prejdenie zleho poctu argumentov k funkcii, ked  je  volana.
Toto moze sposobit havariu pouzitim argumentu, ktory  tu  nebol,
alebo vychylenie zasobnika,ked sa funkcia vracia. C nekontroluje
pocet argumentov.
 4.  Volanie  premennej    ukazovatela    funkcie    (t.j.    (*
ptr_to_func)  ()  ),  ktora  ma  chybnu  hodnotu,  alebo  nebola
inicializovana.  Toto je celkom nahodny skok.
 5. Volanie funkcie, ktora nebola definovana v priamom mode.
Avsak chybne hodnoty v tychto pripadoch nesmu byt samozrejme:
mozu byt sposobene niektorymi z chyb, opisanych nizsie.
   Teraz obecny zoznam pravdepodobnych problemov:
 1.  Velke  pismena  su  odlisne    od    nizsich    pismen    v
identifikatoroch.
 2. Skontrolujte, ci su vsetky komentare ukoncene.
 3. Skontrolujte, ci su vsetky retazcove premenne ukoncene.
 4. Skontrolujte,ci su vsetky premenne inicializovane, zvlast ci
bod ukazovatela ukazuje tam, kde sme predpokladali (t.j.  nepise
*ptr = x; pred tym, nez napise ptr = y; ) .
 5. POZORNE skontrolujte, ci "= =" je pouzite pre testy rovnosti
a " = " iba pre oznacenie.
 6. Pamatajte, ze vsetky polia zacinaju indexom 0. Pole  oznace-
ne ako a[N] ma prave N prvkov iducich od indexu 0 po index N-1.
 7. Nazov  pola  vyhodnocuje  ukazovatel  pola    a  nesposobuje
zvlast, ze kopia pola nie je funkciou.
 8. Nejestvuju ziadne uplne oznacenia pola alebo struktury. Toto
musi byt robene prvok za prvkom ( alebo vstavanin funkcie "move"
do kniznice ). Osobitne test  ( a = = b ),  kde  "a"  a  "b"  su
polia , testuje, ci maju rovnaku zakladnu adresu, nie ten isty
obsah.     Test ( s = = "text") je takmer vzdy chybny.
 9. Pamatajte,  ze  lokalne  premenne  a  argumenty  funkcii  su
rozmiestnene na vrchole  zasobnika  a  su  odlozene  az  kym  sa
funkcia nevykona.
 10. Vsetky argumenty funkcii sa zadavaju  hodnotou.  Explicitny
ukazovatel musi byt pouzity na zadavanie premenneho parametra.
 11.  Skontrolujte  pocet  a  typy  argumentov,  pouzitych    vo
funkciach , ak doteraz neboli skontrolovane.
 12. Skontrolujte, ci su ukazovatele tam, kde treba (tak, ze ar-
gument moze byt zameneny funkciou). Moze sa vyzadovat operator &
 13. Vzdy ked funkcia nema ziadne argumenty, musi mat " () "  po
svojom mene, aby sa vyvolala. Toto bude normalne zachytene ako
typova chyba, ale prikaz :    func_with_no_args ;
sposobi, ze adresa funkcie bude vyhodnotena a odhodena.
Zavolanie funkcie je mozne jedine prikazom :p
    func_with_no_args () ;
 14.  Pamatajte,  ze  typy  funkcii  navratu  mozu  byt   menene
automaticky pravidlami C. Najma  int  moze byt oseknuty na  char
 15. Pamatajte, ze hodnota konca suboru  EOF (end-of-file) je
-1 a nemoze byt testovana voci premennej  char  , pre vysledok
getcher, getc ... musi byt pouzity  int.
 16. Skontrolujte, ci je vhodne --i alebo  i--.  Osobitne  treba
poznamenat, ze normalna slucka o N razoch iduca od 0 po N-1 sa
pise ako:     for ( i=0; i<N; ++i ) do_something ();
 17. Pamatajte, ze zvysenie ukazovatela sposobi, ze jeho binarna
hodnota vzrastie o velkost objektu, na  ktory  ukazuje,  tak  ze
ukazuje na nasledujuci objekt v poli. Zvlast treba pamatat, ze
ukazovatel na  "int"  rastie o dva byty naraz. Tiez nezabudnite
ze  nejaka  hodnota  pripocitana  k  ukazovatelu  bude  nasobena
velkostou predchadzajuceho objektu.
 18. Aritmeticke pretecenie nie je chybou a nezistuje sa testom.
Niekedy moze byt uzitocne, ale treba explicitne zahrnut kontrolu
ak treba.
 19. Retazec je ukazovatelom pola charakterov (je adresa). Na
retazce  nemozno  pouzit  testy  rovnosti  podobne   Pascalovmu.
Osobitne si dajte pozor na pisanie  " x ", ked mate namysli 'x'.
Prve je adresa  dvojbytoveho  pola  a  druhe  je  ASCII  hodnota
charakteru.
 20. Retazec ma nulovy byt na konci. Pamatajte na to pri vypocte
dlzky pola a nezabudnite  tam  jeden  polozit,  ak  vas  program
pracuje s retazcami.
 21.  Niekedy  moze  byt   vyhoda    operatorov    prekvapujuca.
Skontrolujte pribuzne operacie ( == <  atd.  )  a  pamatjte,  ze
operatory  posuvu  maju  menej  vyhod  ako  scitanie   tak    ze
(hi<<8+10) nema ten vyznam, ako by sa zdalo.
 22. Poradie vyhodnocovania vyrazu  NIE je presne urcene a NIKDY
sa nan nemozme spoliehat.
 23. "if" bezprostredne predchadza "else".
 24. Vykonavanie  preteka  cez  prikaz  case  do  nasledujuceho.
Break je potrebne vypustit z prikazu switch.
 25. Ak sa premenna "switch" nehodi k ziadnemu vyrazu "case",
potom je prikaz obteceny.
 26. Medzi riadiacimi prikazmi (while, if,  for)  a  prikazmi  a
prikazmi, ktore ich riadia nie je ziadna bodkociarka. Na  druhej
strane, uplnost prikazu je kontrolovana.
 27. je prirodzene chybou koncit #definovany riadok bodkociarkou
 28. Vsetky argumenty funkcie  scanf  musia byt ukazovatelmi. To
znamena, ze  musia  byt  ADRESAMI  premennej,  kde  vysledok  je
vlozeny do pamati.
5