C là một ngôn ngữ dạng tự do . Điều đó có nghĩa là bạn có thể định dạng nó theo nhiều cách và nó vẫn sẽ là một chương trình hợp pháp.
Ví dụ một câu lệnh như
a = b * c;
có thể được viết như
a=b*c;
hoặc thích
a
=
b
*
c
;
Vì vậy, khi trình biên dịch thấy các dòng
temp = *a
*a = *b;
nó nghĩ nó có nghĩa là
temp = *a * a = *b;
Đó tất nhiên không phải là một biểu thức hợp lệ và trình biên dịch sẽ phàn nàn về điều đó thay vì dấu chấm phẩy bị thiếu. Lý do nó không hợp lệ là vì a
là một con trỏ tới một cấu trúc, vì vậy *a * a
đang cố gắng nhân một thể hiện cấu trúc ( *a
) với một con trỏ đến một cấu trúc ( a
).
Mặc dù trình biên dịch không thể phát hiện dấu chấm phẩy bị thiếu, nhưng nó cũng báo cáo lỗi hoàn toàn không liên quan trên dòng sai. Điều này rất quan trọng cần chú ý vì dù bạn có nhìn vào dòng báo lỗi bao nhiêu đi chăng nữa thì vẫn không có lỗi ở đó. Đôi khi những vấn đề như thế này bạn sẽ cần phải xem lại các dòng trước đó để xem chúng có ổn và không có lỗi hay không.
Đôi khi bạn thậm chí phải tìm trong một tệp khác để tìm ra lỗi. Ví dụ: nếu tệp tiêu đề đang xác định cấu trúc lần cuối cùng nó thực hiện trong tệp tiêu đề và dấu chấm phẩy kết thúc cấu trúc bị thiếu, thì lỗi sẽ không xảy ra trong tệp tiêu đề mà trong tệp bao gồm tệp tiêu đề.
Và đôi khi nó còn tồi tệ hơn: nếu bạn bao gồm hai (hoặc nhiều) tệp tiêu đề và tệp đầu tiên chứa một khai báo không đầy đủ, hầu hết có thể lỗi cú pháp sẽ được chỉ ra trong tệp tiêu đề thứ hai.
Liên quan đến vấn đề này là khái niệm về lỗi tiếp theo . Một số lỗi, thường do thiếu dấu chấm phẩy trên thực tế, được báo cáo là nhiều lỗi. Đây là lý do tại sao điều quan trọng là phải bắt đầu từ đầu khi sửa lỗi, vì việc sửa lỗi đầu tiên có thể làm cho nhiều lỗi biến mất.
Tất nhiên, điều này có thể dẫn đến việc sửa từng lỗi một và việc biên dịch lại thường xuyên có thể phức tạp với các dự án lớn. Tuy nhiên, nhận ra những lỗi tiếp theo như vậy là một điều gì đó đi kèm với kinh nghiệm và sau khi nhìn thấy chúng một vài lần, bạn sẽ dễ dàng tìm ra các lỗi thực sự và sửa nhiều lỗi cho mỗi lần biên dịch lại.