Xin chào và chào mừng.
Trong video này, tôi muốn giải thích cho bạn biết lỗi trình biên dịch là gì.
Đến thời điểm này.
Phải.
Chúng tôi đã viết một số mã và chúng tôi nhận thấy rằng trong cửa sổ đầu ra của bản dựng, chúng tôi đưa
ra lệnh biên dịch và chúng tôi biết khi nào có lỗi.
Phải.
Thông thường sẽ có một mô tả hay nói rằng có lỗi trong mã của bạn, nhưng điều đó chính xác có
nghĩa là gì?
Vì vậy, khi bạn viết mã cho một chương trình, ngôn ngữ, ngôn ngữ lập trình rất, rất nghiêm ngặt.
Họ có quy tắc.
Và bạn phải tuân theo các quy tắc đó để chương trình có thể thực thi được.
Một trình biên dịch sẽ thực sự kiểm tra cú pháp của mã.
Và nếu nó đúng và nếu không có lỗi ngữ nghĩa, thì nó sẽ tạo ra từ mã nguồn, mã loại ngôn ngữ máy
và bạn có thể chạy chương trình.
Và vì vậy bạn phải tuân theo các quy tắc này và chúng là những quy tắc rất chi tiết.
Và vì vậy bạn phải được định hướng rất chi tiết.
Vì vậy, lỗi trình biên dịch có thể có hai dạng.
Chúng có thể ở dạng lỗi cú pháp hoặc lỗi ngữ nghĩa.
Lỗi cú pháp là khi bạn có gì đó sai với cấu trúc của mã, bạn không tuân theo
các quy tắc của ngôn ngữ về cú pháp của nó, phải không?
Bạn không đặt dấu ngoặc đơn vào đúng không gian.
Bạn không thêm tất cả các câu lệnh của mình bằng dấu chấm phẩy.
Bạn không phải bạn đang viết sai chính tả từ khóa.
Đây là tất cả các ví dụ phổ biến.
Dấu chấm phẩy là một dấu chấm phẩy thực sự phổ biến khi bạn mới bắt đầu.
Vì vậy, nếu bạn khai báo một biến và bạn gán nó cho năm nhưng bạn không có dấu chấm phẩy đó ở cuối,
thì đó là một lỗi cú pháp.
Có gì đó không ổn với cấu trúc đó.
Tương tự như khi bạn sử dụng một câu lệnh printf và bạn nói một câu lệnh printf bên trong dấu ngoặc kép, nhưng
bạn lại quên phần kết thúc, dấu ngoặc kép.
Đó là một lỗi cú pháp.
Và do đó, có điều gì đó không ổn với cấu trúc đó trong trình biên dịch, thông thường khi nó
quét mã nguồn của bạn và tìm thấy lỗi này, nó thường sẽ đưa ra một lỗi mô tả có nghĩa là có thể chỉ cho bạn đi đúng hướng
và cũng thường đưa ra số dòng.
Và chúng ta đã thấy điều đó trong các video trước.
Loại lỗi khác mà trình biên dịch có thể bắt gặp là lỗi ngữ nghĩa.
Nó không phải lúc nào cũng bắt lỗi ngữ nghĩa nếu chúng là lỗi logic, nhưng ngữ nghĩa thường có nghĩa là có gì đó
không đúng với ý nghĩa.
Mục đích của chương trình.
Vì vậy, ví dụ, nếu bạn cộng hai biến A và B, nhưng các biến đó khác loại và điều đó không
có ý nghĩa gì, phải không?
Thật vô nghĩa khi thêm A và B.
Trình biên dịch đôi khi có thể bắt các lỗi ngữ nghĩa này.
Các lỗi ngữ nghĩa khác liên quan đến logic và chúng ta sẽ thảo luận về những lỗi đó.
Và trình biên dịch không phải lúc nào cũng tìm thấy chúng.
Cấu trúc đúng và mọi thứ đều ổn với cấu trúc, nhưng về mặt logic thì có gì đó không đúng.
Có một lỗi trong logic của mã.
Vì vậy, khi bạn nghĩ về các lỗi ngữ nghĩa, những gì trình biên dịch có thể bắt được, nó liên
quan nhiều hơn đến việc bắt kiểu và những thứ mà bạn không được phép làm với các quy tắc khác nhau của
ngôn ngữ liên quan đến các kiểu biến.
Vì vậy, bây giờ chúng ta hãy xem ánh sáng mã để xem một số ví dụ phổ biến về một số lỗi cú pháp và ngữ nghĩa trong
ngôn ngữ lập trình C.
Vì vậy, ở đây chúng tôi đang làm sáng tỏ mã với một ứng dụng kiểu Hello world đơn giản.
Đây là mã được tạo cho bạn từ cài đặt dự án của bạn.
Nếu bạn đã lưu nó dưới dạng mẫu.
Mã rất đơn giản phải không?
Và khi bạn biên dịch tệp này, nó sẽ cho bạn biết bạn có bị lỗi cú pháp hay không.
Bạn có thể nhấp chuột phải lần nữa và bạn có thể nói biên dịch.
Và hiện tại chúng ta không có bất kỳ lỗi nào đúng không?
Nhưng về mặt cú pháp, chúng tôi tuân theo tất cả các quy tắc.
Nhưng cú pháp lại bao gồm tất cả cấu trúc của mã.
Vì vậy, nếu bạn không có dấu chấm phẩy hoặc nếu bạn không có ký hiệu thăng trước phần bao gồm và bạn cố gắng
biên dịch nó.
Bạn sẽ thấy rằng có lỗi và thông thường lỗi trình biên dịch lỗi có ý nghĩa nào đó.
Bây giờ, khi bạn viết ngày càng nhiều mã và bạn thực hành ngày càng nhiều, những trình biên dịch này sẽ không còn quá
khó hiểu nữa.
Chúng sẽ không quá phi mô tả mà bạn sẽ thấy quen thuộc, chẳng hạn như
lỗi này cho biết chúng tôi có lỗi ở dòng một, phải không?
Và vì vậy nó là tốt đẹp.
Bạn có thể nhấp đúp chuột vào đây.
Nó sẽ đi đến lỗi đó, nhưng nó nói kỳ vọng bằng biết dấu chấm phẩy.
Nó không thực sự cho bạn biết những gì là sai.
Bạn biết đấy, thông qua thực hành lập trình, bạn sẽ nhận ra, ồ, tôi đã quên ký hiệu bảng Anh.
Vì vậy, một số lỗi trình biên dịch không được mô tả như bạn muốn nếu bạn là người mới lập trình.
Vì vậy, bạn thêm điều đó, thêm biểu tượng bảng Anh đó, bạn biên dịch lại và bạn đã sẵn sàng để bắt đầu.
Nếu viết sai chuẩn i o đôi khi sẽ không tìm được.
Vì vậy, bạn lưu nó và bạn biên dịch lại và bạn thấy một lỗi mô tả rõ hơn một chút.
Phải?
Không có tệp hoặc thư mục nào như vậy Stdio. h kiểu đó nói với bạn rằng, ồ, có thể bạn viết sai chính tả.
Vì vậy lỗi chính tả là lỗi phổ biến.
Bạn biết đấy, không đặt mọi thứ theo quan điểm thích hợp trong các dấu ngoặc đơn không khớp.
Bạn biết đấy, bạn quên một dấu ngoặc đơn, bạn biết đấy, một lần nữa, bạn biên dịch lại.
Hãy xem lỗi đó trông như thế nào.
Một lần nữa, đó không phải là siêu mô tả.
Nó nói rằng, bạn biết đấy, về cơ bản có một dấu ngoặc đơn trước dấu ngoặc nhọn kết thúc bởi vì nó không biết rằng
nó nghĩ rằng có thể dấu ngoặc đơn bên phải này sẽ kết thúc ở đâu đó dưới đây.
Nó không thể luôn luôn cho bạn biết chính xác những gì đang xảy ra.
Vì vậy, dấu ngoặc đơn và dấu ngoặc nhọn bị thiếu đôi khi không mang tính mô tả.
Nhưng nếu bạn có thứ gì đó giống như dấu chấm phẩy bị thiếu, điều đó khá đơn giản.
Lỗi biên dịch đó cho bạn biết chính xác điều gì đang xảy ra.
Dự kiến dấu chấm phẩy trước loại trả về chẵn sẽ chỉ cho bạn nơi bạn phải đặt dấu chấm phẩy đó.
Vì vậy, bạn có thể nhấp đúp vào đó, đặt dấu chấm phẩy nếu bạn thiếu dấu ngoặc kép và bạn biên dịch lại.
Phải?
Bây giờ bạn thấy một cái gì đó nói về cơ bản bị thiếu, chấm dứt trích dẫn kép.
Và một lần nữa, nó chỉ cho bạn nơi trích dẫn đầu tiên xảy ra và nó đưa ra cho bạn nhiều lỗi,
Đúng vậy, mặc dù bạn thực sự chỉ mắc một lỗi.
Vì vậy, bạn đã có câu trích dẫn kép đó và bạn đã sẵn sàng để đi.
Bây giờ, main này nói rằng bạn cần trả về một int.
Điều gì sẽ xảy ra nếu bạn thực sự cố gắng trả lại nội dung nào đó giống như bên trong dấu ngoặc kép?
Một lần nữa, bạn không tuân theo cấu trúc ngôn ngữ đó và về cơ bản nó cho bạn biết bạn đang trả
về một con trỏ ký tự từ một kiểu hàm.
Một lần nữa, những lỗi biên dịch này có thể không có ý nghĩa với bạn ngay bây giờ, nhưng khi
bạn viết càng nhiều mã, chúng sẽ càng có ý nghĩa.
Nhưng đó là tất cả về việc tuân theo cấu trúc đó.
Bây giờ, nếu bạn cố gắng làm những điều khiến nó có nghĩa về mặt cú pháp, nhưng nghĩa lại không chính xác.
Vì vậy, ví dụ, giả sử chúng ta in F và sau đó chúng ta cố gắng thực hiện một phép tính số học
như chia cho tám hoặc chia cho bảy.
Chúng tôi lưu nó và chúng tôi biên dịch nó và bây giờ chúng tôi thấy nhiều lỗi ngữ nghĩa hơn khi chúng tôi có ký hiệu chia sau
dấu ngoặc kép.
Bạn biết nơi nó thực sự mong đợi Dấu chấm phẩy C. Về cơ bản, chúng tôi sẽ tìm thấy các lỗi cú pháp, lỗi ngữ nghĩa.
Ý nghĩa của mã thường liên quan đến logic.
Không tìm thấy nhiều lỗi ngữ nghĩa xảy ra nhiều hơn trong một ngôn ngữ như C plus plus khi bạn đang sử dụng.
Các đối tượng.
Vì vậy, hãy cảnh giác với các lỗi cú pháp từ trình biên dịch.
Những điều phổ biến sai chính tả lạm dụng của.
Các từ khóa không kết thúc bằng dấu ngoặc đơn khi bạn bắt đầu chúng trong các khối mã khi bạn không
có khối kết thúc và bắt đầu Và bạn có thể gặp nhiều lỗi, phải không?
Vì vậy, nói rằng chúng tôi nói rằng chúng tôi có Hello world.
Chúng tôi đang thiếu một dấu chấm phẩy.
Chúng tôi đang trả lại một chuỗi.
Bạn biết đấy, chúng tôi đang thiếu một dấu ngoặc, bạn biết đấy, và chúng tôi xây dựng nó.
Và đây là một chương trình khá nhỏ.
Nhưng khi chúng tôi cố gắng biên dịch nó bây giờ, chúng tôi thấy có nhiều lỗi, phải không?
Hai lỗi.
Và hơi khó, kiểu như, tôi phải bắt đầu từ đâu?
Thông thường, điều bạn sẽ làm là sửa lỗi đầu tiên vì đôi khi một lỗi có thể gây ra nhiều lỗi hơn.
Vì vậy, bạn luôn muốn xem lỗi trình biên dịch ở trên cùng và sửa lỗi đó trước.
Vì vậy, bạn muốn sửa một trong dòng thứ năm, phải không?
Và sau đó bạn có thể muốn sửa và sau đó biên dịch lại và sau đó có thể sửa lỗi ở dòng sáu sau đó.
Và bây giờ nó nói Jason.
Vì vậy, bây giờ bạn có thể nói trả về 0, nhưng luôn sửa lỗi đầu tiên đó trước khi bạn sửa các lỗi tiếp theo
vì lỗi này có thể gây ra lỗi kia.
Và nhân tiện, chúng ta sẽ luôn có lỗi trong mã của mình.
Chúng tôi, ngay cả những lập trình viên dày dặn nhất cũng sẽ mắc lỗi cú pháp.
Và do đó, việc có sai sót là chuyện thường.
Điều thực sự quan trọng là hiểu các thông báo đến từ trình biên dịch để cho bạn biết
cách sửa chúng.
Và một lần nữa, điều đó sẽ đến trong thực tế.
Chúng ta sẽ nói nhiều hơn về trình biên dịch, những trình biên dịch phổ biến trong các video sau này, nhưng hãy
cố gắng đảm bảo rằng bạn đang tuân theo cấu trúc của ngôn ngữ khi bạn học nó, các ngôn ngữ cú pháp, v.v.
Trong vài bài giảng tiếp theo, chúng ta sẽ nói về cách chúng ta có thể mắc các loại lỗi khác nhau.
Tôi đã đề cập đến lỗi logic.
Chúng ta cũng có thể nói một chút về cảnh báo.
Chúng ta cũng sẽ nói về lỗi liên kết và lỗi thời gian chạy.
Cảm ơn.