Барнома дақиқан ҳамонро иҷро мекунад, ки шумо навиштед, на ҳамонро, ки дар назар доштед. Вақте ин ду фарқ мекунанд, хато вуҷуд дорад, ва ёфтани он ислоҳи хато (дибаг) номида мешавад. Мутахассисон ҳам хато менависанд. Онҳо усуле доранд, ки хатоҳоро бо он меёбанд. Хаторо дар функсияи даҳсатра хеле осонтар меёбанд, нисбат ба main-и садсатра.
Се навъи мушкилот
- Хатои компилятсия. Код қоидаҳои C++-ро вайрон мекунад, бинобар ин барнома сохта намешавад. Довар мегӯяд: Хатои компилятсия. Ба сатре, ки паём ном мебарад, ва ба сатри болоии он нигоҳ кунед.
- Қатъи ногаҳонӣ. Барнома дар миёна меистад: индекс берун аз вектор, тақсим ба сифр. Довар мегӯяд: Хатои иҷро. Ба индексҳо ва тақсимкунандаҳо нигоҳ кунед.
- Хатои мантиқӣ. Барнома тамом мешавад, вале ҷавоб нодуруст аст. Довар мегӯяд: Ҷавоби нодуруст. Паём нест: қисми зиёди дарс дар бораи ҳамин аст.
Вақт тамом шуд мушкилоти чорум аст: дуруст, вале хеле суст. Натиҷаҳои довариро бо «Детективи натиҷа» дар Ёфтани хато: натиҷаҳо ва абзорҳо машқ кунед.
Хондани хатои компилятор
Ҳар паём шакли якхела дорад: парванда, сатр ва сутун, калимаи error ва он ки чӣ хато рафт. Инак функсия бо нуқтавергули тарккарда ва ҷавоби g++ 15:
Аз чап хонед: сатри 5 (дар парванда боз сатрҳои #include ва using болотар ҳастанд), сутуни 17, ; интизор меравад. Каретка ^ ҷойро нишон медиҳад, ва сатри зери он ҳатто ;-ро, ки бояд гузошт, нишон медиҳад. Дар ин ҷо сатри номбаршуда ҳамон аст, ки ; намерасад.
Ҳамеша чунин нест. Баъд аз int a = 5 дар сатри 5, cout << a; дар сатри 6 меояд. Компилятор намедонад, ки сатри 5 тамом шудааст, бинобар ин g++ мегӯяд: 6:5: error: expected ',' or ';' before 'cout'. Он сатри 6-ро ном мебарад, вале ; бояд дар охири сатри 5 бошад. (Виростор дар лабораторияҳо дар ин ҷо сатри 5-ро ном мебарад.) Пас: ба сатре, ки паём ном мебарад, ва ба сатри болоии он нигоҳ кунед.
Аввал хатои якумро ислоҳ кунед: як } ё ;-и намондашуда метавонад компиляторро водор кунад, ки ҳама чизи баъдро нодуруст бифаҳмад. Паёмҳои аз ҳама зуд-зуд вомехӯрда:
expected ';' before …: дар охири ин сатр ё сатри болоӣ;намерасад.'bigger' was not declared in this scope; did you mean 'biger'?: хатои имлоӣ дар ном, тағйирёбанда берун аз майдони амали худ, ё функсия, ки дар зери сатри даъваткунандаи худ навишта шудааст.too few arguments to function 'int bigger(int, int)': дар даъват аз параметрҳои функсия камтар аргумент ҳаст.