Hướng dẫn thực hành: Nhập môn lập trình<br />
<br />
Lớp 07DB_A/B<br />
<br />
Người soạn: Nguyễn Hải Minh<br />
Email: nhminh@fit.hcmuns.edu.vn<br />
<br />
CHỦ ĐỀ: CÁC LỖI THƯỜNG GẶP KHI BIÊN DỊCH<br />
CHƯƠNG TRÌNH TRÊN VC++ 6.0<br />
---oOo---<br />
<br />
I. GIỚI THIỆU<br />
Khi biên dịch chương trình (F7), chú ý cửa sổ Build ở dưới, các thông tin về lỗi (errors) và<br />
cảnh báo (warnings) nếu có sẽ được liệt kê chi tiết ở đây:<br />
<br />
Ví dụ trong hình: dòng màu vàng là lỗi, màu xanh là cảnh báo. Con số phía trước mỗi<br />
lỗi/cảnh báo cho biết số thứ tự dòng code xuất hiện lỗi/cảnh báo (ở đây là dòng thứ 9). Dựa<br />
vào những ký hiệu cũng như thông tin về lỗi/cảnh báo này, bạn có thể tìm ra nhanh chóng lỗi<br />
của mình nằm ở đâu và cách sửa như thế nào.<br />
Các bước cần làm khi biên dịch chương trình có lỗi:<br />
1) Xem có bao nhiêu lỗi, bấm F4 để nhảy đến dòng chứa lỗi đầu tiên<br />
2) Đọc xem thông báo lỗi là gì, sửa lỗi đó<br />
3) Biên dịch lại project (F7) rồi quay lại bước 1<br />
<br />
Trang 1<br />
<br />
Hướng dẫn thực hành: Nhập môn lập trình<br />
<br />
Lớp 07DB_A/B<br />
<br />
II. MỘT SỐ LỖI THƯỜNG GẶP<br />
C2143: Syntax error : missing before <br />
Lỗi cú pháp (syntax error), thường là thiếu dấu đóng ngoặc, chấm phẩy<br />
<br />
Ví dụ: (9) missing ‘;’ before ‘return’ => Thiếu dấu ‘;’ trước câu lệnh return ở dòng 9. Rà soát<br />
lại trước dòng 9, phát hiện thiếu dấu ‘;’ sau câu lệnh printf(“Hello World!”)<br />
C1010: unexpected end of file while looking for precompiled header directive<br />
Lỗi này xuất hiện khi bạn không tạo Empty project mà tạo một project có sẵn (Hello World)<br />
với 2 file được tạo sẵn là StdAfx.h và StdAfx.cpp. Với loại project này, bạn phải #include<br />
StdAfx.h ngay đầu file .cpp chứa hàm main của bạn. Nếu không trình biên dịch sẽ báo lỗi như<br />
trên. Cách giải quyết:<br />
Cách 1: Thêm dòng #include “StdAfx.h” vào ngay đầu file .cpp chứa code chương<br />
trình của bạn<br />
<br />
Trang 2<br />
<br />
Hướng dẫn thực hành: Nhập môn lập trình<br />
<br />
Cách 2: Vào Project<br />
<br />
Settings<br />
<br />
Lớp 07DB_A/B<br />
<br />
chuyển sang tab C/C++, chọn Precompiled<br />
<br />
Headers trong Category, check vào ô Not Using Precompile Header<br />
<br />
C2001: newline in constant<br />
Lỗi này thường gặp khi một chuỗi hay ký tự khai báo mà quên đóng ngoặc kép ’ hay ”<br />
<br />
Ví dụ: chuỗi đưa vào lệnh printf (dòng thứ 8) thiếu dấu đóng ngoặc kép ”<br />
Trang 3<br />
<br />
Hướng dẫn thực hành: Nhập môn lập trình<br />
<br />
Lớp 07DB_A/B<br />
<br />
C2065: '' : undeclared identifier<br />
Lỗi này là do bạn đã sử dụng một biến hay hàm con mà chưa khai báo biến/hàm đó trong<br />
phạm vi sử dụng.<br />
<br />
Ví dụ:<br />
Dòng 8 sử dụng biến giatri chưa được khai báo<br />
Dòng 9 sử dụng hàm abs chưa được khai báo<br />
Dòng 10 sử dụng hàm Xuat chưa được khai báo<br />
Cách giải quyết: thêm vào các khai báo thích hợp (khai báo hàm abs được đặt trong math.h)<br />
<br />
Trang 4<br />
<br />
Hướng dẫn thực hành: Nhập môn lập trình<br />
<br />
Lớp 07DB_A/B<br />
<br />
C2447: missing function header (old-style formal list?)<br />
Lỗi này thường gặp khi sử dụng dấu ; trước dấu { trong thân hàm.<br />
Ví dụ:<br />
void Function(int a, int b);<br />
{<br />
a = a + b;<br />
}<br />
C2556: '' : overloaded functions only differs only by return type<br />
C2371: '' : redefinition; different basic types<br />
Hai lỗi này thường gặp khi có sự không khớp nhau giữa kiểu của hàm trong khai báo hàm<br />
và trong định nghĩa hàm<br />
Ví dụ:<br />
Khai báo hàm:<br />
<br />
int Function(int a, int b);<br />
<br />
Cài đặt:<br />
<br />
void Function(int a, int b)<br />
{<br />
a = b * 2.3;<br />
return a;<br />
}<br />
<br />
Trang 5<br />
<br />