Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
1,07 MB
Nội dung
khóa $ gcc217 hello.c -o hello hello.c: In function `main': hello.c:7: error: `retun' undeclared (first use in this function) hello.c:7: error: (Each undeclared identifier is reported only once hello.c:7: error: for each function it appears in.) hello.c:7: error: syntax error before numeric constant Hiểu thông báo lỗi ▪ Một số thông báo lỗi đến từ linker Sai tên hàm #include gọi int main(void) /* Print "hello, world" to stdout and return */ { prinf("hello, world\n") return 0; } Compiler warning (not error): prinf() Linker error: khơng tìm thấy định nghĩa hàm prinf() gọi trước khai báo $ gcc217 hello.c -o hello hello.c: In function `main': hello.c:6: warning: implicit declaration of function `prinf' /tmp/cc43ebjk.o(.text+0x25): In function `main': : undefined reference to `prinf' collect2: ld returned exit status “ Việc thay đổi mã nguồn khơng hợp lý gây nhiều vấn đề để ngun khơng thay đổi gì, phải suy nghĩ trước làm Suy nghĩ trước viết ▪ Gỡ rối gặp ▫ Khi phát lỗi, sửa ngay, đừng để sau sửa, lỗi khơng xuất lại (do tình huống) ▫ Cân nhắc: việc sửa chữa có ảnh hưởng tới tình khác hay khơng ? ▪ Quan sát lỗi từ góc độ khác ▫ Viết đoạn mã nguồn gây lỗi giấy ▸ Đừng chép hết đoạn khơng có nguy gây lỗi, in toàn code giấy in => phá vỡ cấu trúc ▫ Vẽ hình minh họa cấu trúc liệu ▸ Nếu mà giải thuật làm thay đổi CTDL, vẽ lại hình trước viết lại giải thuật ▫ Đọc trước gõ vào ▸ Đừng vội vàng, khơng rõ điều thực gây lỗi sửa khơng chỗ có nguy gây lỗi khác Suy nghĩ trước viết ▪ Tạm dừng viết chương trình ▫ Khi gặp vấn đề, khó khăn, chậm tiến độ, thay đổi cơng việc => rút khỏi luồng quán tính sai lầm … ▫ Bỏ qua đoạn chương trình có lỗi ▫ Khi cảm thấy sẵn sàng chữa ▪ Giải thích logic đoạn mã nguồn: ▫ Cho bạn ▸ Tạo điều kiện để suy nghĩ lại ▫ Cho khác phản bác ▸ Extrem programming : làm việc theo cặp, pair programming, người LT, người kiểm tra, ngược lại ▫ Cho khơng thể phản bác (cây, cốc trà đá, gấu bông…) ▸ Tạo điều kiện củng cố suy luận Tìm lỗi tương tự switch (i) { case 0: … /* missing break */ case 1: … break; … } if (i = 5) … if (5 < i < 10) … int i; … scanf("%d", i); char c; … c = getchar(); while (c = getchar() != EOF) … if (i & j) … Tips: đặt chế độ cảnh báo (warnings) dịch hầu hết lỗi kiểu phát Tìm lỗi tương tự ▪ Khi gặp vấn đề, liên tưởng đến trường hợp tương tự gặp ▫ Vd1 : int n; scanf(“%d”,n); ? ▫ Vd2 : int n=1; double d=PI; printf(“%d %f \n”,d,n); ?? ▪ Không khởi tạo biến (với C) gây lỗi khó lường Tìm lỗi tương tự ▪ Làm cho lỗi xuất lại ▫ Cố gắng làm cho lỗi xuất lại cần ▫ Nếu khơng được, thử tìm ngun nhân lại khơng làm cho lỗi xuất lại {C/C++} Array as a parameter handled improperly – Tham số mảng xử lý không cách Array index out of bounds – Vượt phạm vi số mảng Call-by-value used instead of call-by reference for function parameters to be modified – Gọi theo giá trị, thay gọi theo tham chiếu cho hàm để sửa Comparison operators misused – Các toán tử so sánh bị dùng sai Compound statement not used - Lệnh phức hợp không dùng Dangling else - nhánh else khong hợp lệ Division by zero attempted - Chia cho Division using integers so quotient gets truncated – Dùng phép chia số nguyên nên phần thập phân bị cắt Files not closed properly (buffer not flushed) - File khơng đóng phù hợp ( buffer khơng bị dẹp) 10 Infinite loop - lặp vô hạn 11 Global variables used – dùng biến tổng thể {C/C++} 12 IF-ELSE not used properly – dùng if-else không chuân 13 Left side of assignment not an L-value phía trái phép gán khơng phải biến 14 Loop has no body – vòng lặp khơng có thân 15 Missing "&" or missing "const" with a call-by-reference function parameter – thiếu dấu & hay từ khóa const với lời gọi tham số hàm theo tham chiếu 16 Missing bracket for body of function or compound statement – Thiếu cặp {} cho thân hàm hay nhóm lệnh 17 Mission reference to namespace - Thiếu tham chiếu tới tên miền 18 Missing return statement in a valuereturning function – Thiếu return 19 Missing semi-colon in simple statement, function prototypes, struct definitions or class definitions – thiếu dấu ; lệnh đơn … 20 Mismatched data types in expressions – kiểu liệu không hợp 21 Operator precedence misunderstood - Hiểu sai thứ tự phép toán {C/C++} 22 Off-by-one error in a loop – Thoát khỏi lỗi vòng lặp 23 Overused (overloaded) local variable names - Trùng tên biến cục 24 Pointers not set properly or overwritten in error – Con trỏ không xác định trỏ vào vị trí khơng có 25 Return with value attempted in void function – trả giá trị hàm void 26 Undeclared variable name – không khai báo biến 27 Un-initialized variables – Không khởi tạo giá trị 28 Unmatched parentheses – thiếu } 29 Un-terminated strings - xâu không kết thúc, thiếu " 30 Using "=" when "= =" is intended or vice versa 31 Using "&" when "&&" is intended or vice versa 32 "while" used improperly instead of "if" – while dùng thay if ... in => phá vỡ cấu trúc ▫ Vẽ hình minh họa cấu trúc liệu ▸ Nếu mà giải thuật làm thay đổi CTDL, vẽ lại hình trước viết lại giải thuật ▫ Đọc trước gõ vào ▸ Đừng vội vàng, không rõ điều thực gây lỗi... trước viết ▪ Tạm dừng viết chương trình ▫ Khi gặp vấn đề, khó khăn, chậm tiến độ, thay đổi công việc => rút khỏi luồng quán tính sai lầm … ▫ Bỏ qua đoạn chương trình có lỗi ▫ Khi cảm thấy sẵn sàng... tham chiếu tới tên miền 18 Missing return statement in a valuereturning function – Thiếu return 19 Missing semi-colon in simple statement, function prototypes, struct definitions or class definitions