Bài 1: Cấu trúc chương trình C++

Cách tốt nhất để học một ngôn ngữ lập trình là viết các chương trình. Thông thường, chương trình đầu tiên mà người mới bắt đầu viết là chương trình có tên “Hello World”, với chức năng đơn giản là in dòng chữ “Hello World” lên màn hình máy tính của bạn. Mặc dù rất đơn giản, nó lại chứa đựng tất cả các thành phần cơ bản của một chương trình C++:

// chương trình đầu tiên của tôi bằng C++

#include <iostream>

int main()

{

  std::cout << “Hello World!”;

}

=> Khi thực thi chương trình sẽ có kết quả: Hello World!

Chúng ta hãy cùng xem xét chương trình này theo từng dòng:

Dòng 1: // chương trình đầu tiên của tôi bằng C++

Hai dấu gạch chéo cho biết phần còn lại của dòng là một chú thích do lập trình viên thêm vào; chú thích này không ảnh hưởng đến hoạt động của chương trình. Lập trình viên sử dụng chú thích để đưa vào các giải thích ngắn gọn hoặc nhận xét về mã nguồn hay chương trình. Trong trường hợp này, đó là một mô tả giới thiệu ngắn gọn về chương trình.

Dòng 2: #include <iostream>

Các dòng bắt đầu bằng dấu thăng (#) là các chỉ thị được đọc và xử lý bởi thành phần gọi là bộ tiền xử lý (preprocessor). Đây là những dòng đặc biệt được xử lý trước khi quá trình biên dịch chương trình thực sự bắt đầu. Cụ thể, chỉ thị #include <iostream> yêu cầu bộ tiền xử lý đưa vào một phần mã C++ tiêu chuẩn, được gọi là tệp tiêu đề (header) iostream. Tệp này cho phép thực hiện các thao tác nhập/xuất dữ liệu tiêu chuẩn, chẳng hạn như việc hiển thị kết quả của chương trình (Hello World) lên màn hình.

Dòng 3: Một dòng trống.

Các dòng trống không ảnh hưởng đến chương trình. Chúng chỉ đơn thuần giúp mã nguồn dễ đọc hơn.

Dòng 4: int main ()

Dòng này bắt đầu việc khai báo một hàm. Về cơ bản, một hàm là một nhóm các câu lệnh mã nguồn được đặt cho một cái tên; trong trường hợp này, nhóm các câu lệnh theo sau được đặt tên là “main”. Các hàm sẽ được thảo luận chi tiết hơn ở chương sau, nhưng về cơ bản, định nghĩa của một hàm bao gồm: kiểu dữ liệu (int), tên hàm (main) và một cặp dấu ngoặc đơn (()), bên trong có thể chứa các tham số (tùy chọn).

Hàm có tên là “main” là một hàm đặc biệt trong tất cả các chương trình C++; đây là hàm được gọi khi chương trình bắt đầu chạy. Mọi chương trình C++ đều bắt đầu thực thi từ hàm main, bất kể hàm này nằm ở vị trí nào trong mã nguồn.

Dòng 5 và 7: { và }

Dấu ngoặc nhọn mở ({) ở dòng 5 đánh dấu sự bắt đầu định nghĩa hàm `main`, và dấu ngoặc nhọn đóng (}) ở dòng 7 đánh dấu sự kết thúc của hàm này. Mọi nội dung nằm giữa các dấu ngoặc nhọn này tạo thành phần thân hàm, xác định những gì sẽ xảy ra khi hàm `main` được gọi. Tất cả các hàm đều sử dụng dấu ngoặc nhọn để chỉ rõ điểm bắt đầu và kết thúc định nghĩa của chúng.

Dòng 6: ‘std::cout << “Hello World!”;’

Dòng này là một câu lệnh trong C++. Một câu lệnh là một biểu thức có khả năng tạo ra tác động cụ thể; đây chính là phần cốt lõi của chương trình, quy định hành vi thực tế của nó. Các câu lệnh được thực thi theo đúng thứ tự xuất hiện trong phần thân hàm.

Câu lệnh này gồm ba phần: Thứ nhất là ‘std::cout’, đại diện cho thiết bị xuất ký tự tiêu chuẩn (thường là màn hình máy tính). Thứ hai là toán tử chèn (‘<<‘), cho biết nội dung theo sau sẽ được đưa vào ‘std::cout’. Cuối cùng là một chuỗi ký tự nằm trong dấu ngoặc kép (`”Hello world!”`) – đây chính là nội dung được xuất ra thiết bị tiêu chuẩn.

Lưu ý rằng câu lệnh kết thúc bằng một dấu chấm phẩy (‘;’). Ký tự này đánh dấu sự kết thúc của câu lệnh, tương tự như cách dấu chấm kết thúc một câu trong ngôn ngữ tự nhiên. Mọi câu lệnh trong C++ đều bắt buộc phải kết thúc bằng dấu chấm phẩy. Một trong những lỗi cú pháp phổ biến nhất trong C++ là quên đặt dấu chấm phẩy ở cuối câu lệnh.

Có thể bạn đã nhận thấy rằng không phải dòng nào trong chương trình này cũng thực hiện một hành động cụ thể khi mã được chạy. Chẳng hạn, có dòng chứa chú thích (bắt đầu bằng ‘//’), dòng chứa chỉ thị tiền xử lý (bắt đầu bằng ‘#’), dòng định nghĩa hàm (trong trường hợp này là hàm ‘main’), và cuối cùng là dòng chứa câu lệnh kết thúc bằng dấu chấm phẩy (thao tác xuất dữ liệu ra ‘cout’) nằm bên trong khối mã được bao bởi các dấu ngoặc nhọn (‘{ }’) của hàm ‘main’.

Chương trình được trình bày trên nhiều dòng và thụt lề hợp lý nhằm giúp con người dễ đọc và dễ hiểu hơn. Tuy nhiên, C++ không có quy định khắt khe về việc thụt lề hay cách phân chia các chỉ lệnh trên các dòng khác nhau. Ví dụ, thay vì:

1           int main ()

2           {

3                     std::cout << ” Hello World!”;   

4           }

Chúng ta có thể viết:

1           int main () { std::cout << “Hello World!”; }

Tất cả trên một dòng duy nhất; cách viết này hoàn toàn tương đương với đoạn mã trước đó. Trong C++, các câu lệnh được phân tách bằng dấu chấm phẩy (;), và việc ngắt dòng không ảnh hưởng gì đến cấu trúc này. Nhiều câu lệnh có thể được viết trên cùng một dòng, hoặc mỗi câu lệnh có thể nằm trên một dòng riêng biệt. Việc chia mã nguồn thành các dòng khác nhau chỉ nhằm mục đích giúp con người dễ đọc và dễ hình dung cấu trúc hơn, chứ không làm thay đổi cách thức hoạt động thực tế của chương trình.

2 thoughts on “Bài 1: Cấu trúc chương trình C++”

Leave a comment