Các thành phần và cấu trúc của một chương trình C++

772
  Debugging – Lỗi cú pháp và ngữ nghĩa trong C++
  Các thành phần và cấu trúc của một chương trình C++
”]

1. Giới thiệu tổng quát về phần 2 này

Chào mừng bạn đến phần đầu tiên của phần 2 với series tự học C ++ này!

Trong các phần này, Cafedev sẽ giới thiệu và hướng dẫn cho các bạn một số chủ đề cần thiết mà mọi chương trình C++ cần có. Vì có khá nhiều chủ đề để trình bày nên cafedev sẽ hướng dẫn cho các bạn ở mức cơ bản và dễ hiểu nhất. Mục tiêu của các phần này là giúp bạn hiểu được cách cơ bản để xây dựng các chương trình C++. Đến với phần 2 của series này, bạn sẽ có thể viết các chương trình đơn giản của riêng bạn bằng C++.

Trong các phần tiếp, chúng tôi sẽ hướng dẫn lại phần lớn các chủ đề này nhưng nó sẽ nâng cao hơn, chi tiết hơn và khá nhiều mẹo hay khi dev C++.

Để giữ cho thời lượng của các bài hướng dẫn ngắn nhưng vẫn đủ kiến thức cho các bạn thì chúng tôi có thể chia các chủ đề thành nhiều bài học liên tiếp. Có thể giúp bạn đở ngán khi bài học quá dài và bài học sẽ hiệu của hơn.

2. Các câu lệnh (Statements)

Một chương trình máy tính(computer programer) là một chuỗi các hướng dẫn cho máy tính biết phải làm gì. Câu lệnh (statement) là một loại các hướng dẫn làm cho chương trình thực hiện một số hành động nào đó.

Các câu lệnh(Statements) là tập hợp một loại các hướng dẫn giúp chương trình C++ làm một số hành động nào đó. Bạn có thể hình dùng nó như sau: câu lệnh(statement) như một câu văn còn các câu lệnh(Statements) như một đoạn văn vậy. Khi chúng ta muốn truyền đạt ý tưởng cho người khác, chúng ta thường viết hoặc nói bằng câu (không phải bằng từ hoặc âm tiết ngẫu nhiên). Trong C ++ cũng như vậy, khi chúng ta muốn chương trình của mình thực hiện điều gì đó, chúng tôi thường viết các câu lệnh để nói nó, bảo nó làm điều chúng ta muốn.

Hầu hết (nhưng không phải tất cả) các câu lệnh trong C ++ đều kết thúc bằng dấu chấm phẩy. Nếu bạn thấy một dòng kết thúc bằng dấu chấm phẩy, thì đó có lẽ là một câu lệnh(statement).

Trong ngôn ngữ cấp cao như C ++, một câu lệnh có thể biên dịch thành nhiều phần của ngôn ngữ máy.

Có nhiều loại câu lệnh khác nhau trong C ++:

  1. Declaration statements(Câu lệnh khai báo)
  2. Jump statements(Câu lệnh nhảy tới vị trí nào đó)
  3. Expression statements(Câu lệnh biểu thức)
  4. Compound statements(Câu lệnh hỗn hợp)
  5. Selection statements (conditionals)(Câu lệnh điều kiện)
  6. Iteration statements (loops)(Câu lệnh lặp)
  7. Try blocks(Một số khối lệnh)

Bạn đừng lo lắng khi chưa biết các loại câu lệnh này vì sau các bài này bạn sẽ hiểu được tất cả những câu lệnh này là gì!

3. Hàm (functions) và hàm main

Trong C ++, các câu lệnh thường được nhóm thành các đơn vị gọi là hàm. Hàm là tập hợp các câu lệnh được thực thi một cách tuần tự. Khi bạn học cách viết các chương trình của riêng mình, bạn sẽ có thể tạo các hàm của riêng mình cùng với sự kết hợp của các câu lệnh theo bất kỳ cách nào bạn muốn (chúng tôi sẽ chỉ sẽ cho các bạn làm điều này trong các bài tiếp theo).

Nguyên tắc:

Mỗi chương trình C++ phải có một hàm đặc biệt có tên main (tất cả các chữ cái viết thường). Khi chương trình được chạy thì nó sẽ thực thi các câu lệnh đầu tiên bên trong hàm main và sau đó tiếp tục chạy tuần tựHay nói cách khác, nó sẽ thực thi hàm main đầu tiên.

Các chương trình thường chấm dứt (kết thúc chạy) khi câu lệnh cuối cùng bên trong hàm main được thực thi xong(Nhưng cũng có một số cách để kết thúc sớm chương trình mà ko cần thực thi tới câu lệnh cuối cùng).

Các hàm thường được viết để làm một công việc cụ thể. Ví dụ: một hàm có tên là max có thể chứa các câu lệnh chỉ ra số nào trong hai số sẽ lớn hơn. Chúng ta sẽ nói nhiều hơn về hàm trong các bài tiếp theo, vì chúng là công cụ tổ chức được sử dụng phổ biến nhất trong một chương trình.

Chú ý:

Khi nói đến hàm thì nó thường được viết bằng cách nối một cặp dấu ngoặc đơn vào cuối tên của hàm. Ví dụ: main() hoặc doSomething(), thì đây là cách viết đơn giản nhất của hàm có tên là main hoặc doSomething. Điều này giúp phân biệt các hàm với các loại đối tượng khác (chẳng hạn như các biến) mà không cần phải viết từ function.

4. Phân tích Chương trình Hello world!

Bây giờ bạn đã có một sự hiểu biết ngắn gọn về các câu lệnh và hàm là gì rồi, bây giờ chúng ta sẽ quay trở lại chương trình Hello World của chúng tôi và xem xét một cách chi tiết hơn từng dòng.

Dòng 1: Dòng này khá đặc biệt và được gọi là chỉ thị tiền xử lý(preprocessor directive). Chỉ thị tiền xử lý này chỉ ra rằng chúng tôi muốn sử dụng nội dung của thư viện iostream, một phần của thư viện chuẩn C++ cho phép chúng ta đọc và viết văn bản ra console. Chúng ta cần dòng này để có thể sử dụng std::cout trên dòng 5. Nếu bạn loại trừ dòng này sẽ dẫn đến lỗi biên dịch trên dòng 5, vì trình biên dịch sẽ không biết std::cout là cái gì.

Dòng 2: Trống và trình biên dịch sẽ bỏ qua nó. Dòng này chỉ tồn tại để giúp chương trình dễ đọc hơn với con người (bằng cách tách biệt chỉ thị tiền xử lý #include và các phần tiếp theo của chương trình).

Dòng 3: Cho trình biên dịch biết rằng chúng ta sẽ viết (định nghĩa) một hàm được gọi là hàm main. Như bạn đã học ở trên, mọi chương trình C ++ phải có hàm main hoặc nó sẽ không biên dịch được.

Dòng 4 và 7: Cho trình biên dịch biết rằng dòng nào là phần của hàm main. Tất cả mọi thứ giữa dấu ngoặc nhọn mở ở trên dòng 4 và dấu ngoặc nhọn đóng ở trên dòng 7 được coi là một phần của hàm main. Đây được gọi là phần thân của hàm main.

Dòng 5: Là câu lệnh đầu tiên trong hàm main và là câu lệnh đầu tiên sẽ thực thi khi chúng ta chạy chương trình. std::cout và toán tử << cho phép chúng ta gửi các chữ cái hoặc số đến của sổ console để hiển thị nó ra. Trong trường hợp này, chúng ta đã gửi cho nó văn bản Hello world!, Đây sẽ là đầu ra cho của sổ console. Câu lệnh này sẽ in ra dòng chữ cho chương trình.

Dòng 6: Là câu lệnh return. Khi một chương trình thực thi kết thúc, chương trình sẽ gửi một giá trị trở lại cho hệ điều hành để cho nó biết liệu chương trình đó có chạy thành công hay không. Câu lệnh return 0 cho hệ điều hành, điều đó có nghĩa là mọi thứ đều ổn! Đây là câu lệnh cuối cùng trong khi thực thi chương trình.

Chú ý:

Nếu các phần (hoặc tất cả) lời giải thích ở trên khó hiểu, thì điều này cũng không lấy gì làm lại tại thời điểm này. Ở đây chúng ta muốn cung cấp một cái nhìn tổng quan nhanh chóng cho các bạn về một chương trình. Các bài học tiếp theo sẽ đi sâu vào tất cả các chủ đề trên, với rất nhiều lời giải thích và ví dụ bổ sung.

Bạn có thể tự biên dịch và chạy chương trình này và bạn sẽ thấy rằng nó đưa ra kết quả sau cho console:

Nếu bạn gặp phải các vấn đề về biên dịch hoặc thực hiện chương trình này thì hãy xem bài học này.

5. Cú pháp và lỗi cú pháp (Syntax và syntax errors)

Trong tiếng Anh, các câu được xây dựng theo các quy tắc ngữ pháp cụ thể mà bạn có thể đã học trong lớp tiếng Anh ở trường. Ví dụ, câu bình thường sẽ kết thúc trong một khoảng thời gian nào đó. Các quy tắc chi phối cách tạo một câu trong một ngôn ngữ được gọi là cú pháp. Nếu bạn không theo quy tắc đó thì được gọi là vi phạm cú pháp tiếng Anh.

C ++ cũng có cú pháp: Là các quy tắc về cách xây dựng các chương trình được coi là hợp lệ. Khi bạn biên dịch chương trình của mình, trình biên dịch có trách nhiệm đảm bảo chương trình của bạn tuân theo cú pháp cơ bản của ngôn ngữ C ++. Nếu bạn vi phạm quy tắc, trình biên dịch sẽ nói cho bạn biết rằng bạn đang cố gắng biên dịch chương trình không theo nguyên tắc và đưa ra lỗi cú pháp.

Đều gì sẽ xảy ra nếu chúng ta bỏ qua dấu chấm phẩy trên dòng 5 của chương trình Hello word, như thế này:

Hãy tự mình biên dịch chương trình này.

Visual Studio sẽ tạo ra lỗi sau (trình biên dịch của bạn có thể tạo thông báo lỗi với các từ ngữ khác nhau):

Điều này cho bạn biết rằng bạn đang lỗi cú pháp trên dòng 6: trình biên dịch đang mong đợi một dấu chấm phẩy trước câu lệnh return, nhưng nó đã không tìm thấy nó. Mặc dù trình biên dịch sẽ cho bạn biết dòng mã nào bi gặp lỗi cú pháp, nhưng thiếu sót thực sự có thể nằm trên dòng trước đó. Trong trường hợp này, lỗi thực sự nằm ở cuối dòng 5 (trình biên dịch không phát hiện ra vấn đề này và chỉ ra dòng 6).

Lỗi cú pháp(syntax error) khá phổ biến khi viết chương trình. May mắn thay, các IDE đã giúp chúng ta đơn giản trong việc tìm kiếm và sửa chữa lỗi, vì trình biên dịch nói chung sẽ hướng bạn ngay vào chỗ lỗi. Quá trình biên dịch chương trình sẽ chỉ hoàn thành khi tất cả các lỗi cú pháp đã được giải quyết.

Bạn có thể thử xóa các ký tự hoặc thậm chí toàn bộ dòng khỏi chương trình Hello Word để xem các loại lỗi khác nhau được tạo. Hãy thử khôi phục dấu chấm phẩy bị thiếu ở cuối dòng 5, sau đó xóa các dòng 1, 3 hoặc 4 và xem điều gì sẽ xảy ra.

TechTalk via Cafedev