Chú thích dùng để làm gì
Chú thích (comment) là phần văn bản trong mã nguồn mà trình biên dịch C++ bỏ qua hoàn toàn. Nó không bao giờ đi vào chương trình đã biên dịch: nó chỉ tồn tại cho người đọc code. Bạn dùng chú thích để giải thích vì sao một việc được làm theo cách nào đó, để lại lời nhắc, hoặc tạm thời vô hiệu hóa code mà không phải xóa nó.
Dựa trên cú pháp C++ bạn đã biết, chú thích là một trong số ít thứ bạn có thể đặt gần như ở bất cứ đâu và trình biên dịch sẽ đơn giản là bỏ qua. C++ có hai loại: chú thích một dòng (//) và chú thích khối nhiều dòng (/* */).
Chú thích một dòng
Hai dấu gạch chéo (//) bắt đầu một chú thích kéo dài tới cuối dòng hiện tại. Trình biên dịch bỏ qua mọi thứ từ // cho tới chỗ xuống dòng.
Để ý chú thích thứ hai nằm chung dòng với code thật. Mọi thứ trước // vẫn chạy; chỉ phần phía sau bị bỏ qua. Đây là kiểu chú thích phổ biến nhất cho các ghi chú ngắn.
Chú thích khối nhiều dòng
Khi ghi chú trải dài nhiều dòng, chú thích khối gọn gàng hơn là thêm // vào đầu mỗi dòng. Chú thích khối bắt đầu bằng /* và kết thúc bằng */. Mọi thứ nằm giữa, dù bao nhiêu dòng, đều bị bỏ qua.
Các ký tự * thẳng hàng ở đầu mỗi dòng là quy ước phong cách, không phải quy tắc. Chỉ có /* mở đầu và */ kết thúc là thật sự quan trọng. Chú thích khối thậm chí có thể nằm giữa một dòng, int x = 5 /* width */ + 2; là hợp lệ, dù cách đó nhanh chóng trở nên khó đọc.
Vô hiệu hóa code bằng chú thích
Chú thích là cách chuẩn để tạm tắt code trong lúc thử nghiệm mà không phải xóa nó. Dùng // cho một dòng, hoặc chú thích khối để tắt nhiều dòng cùng lúc.
Chạy thử và bạn sẽ chỉ thấy hai dòng "runs" được in ra. Các câu lệnh cout đã bị chú thích là vô hình với trình biên dịch.
Cái bẫy không lồng nhau được
Một cái bẫy hay làm người mới vấp: chú thích khối không lồng nhau được. */ đầu tiên sẽ đóng chú thích, bất kể trước đó có bao nhiêu /*. Vì vậy bạn không thể bọc một khối /* ... */ bên trong một khối /* ... */ khác: */ bên trong sẽ kết thúc toàn bộ, và mọi thứ sau nó lại trở thành code (thường gây lỗi cú pháp).
/* Trying to disable a region that already has a block comment...
int n = 10; /* the width */
cout << n;
*/ // the first */ above already closed the comment - this line is now stray code
Chú thích bên ngoài kết thúc tại */ sau the width, nên phần còn lại không còn là chú thích nữa và trình biên dịch báo lỗi ở */ thừa phía sau. Khi cần vô hiệu hóa một vùng đã chứa sẵn chú thích khối, hãy dùng // ở mỗi dòng. Phần lớn trình soạn thảo bật tắt chú thích dòng cho cả vùng chọn chỉ với một phím tắt, giúp tránh hẳn vấn đề này.
Chú thích tốt và chú thích thừa
Một chú thích nên giải thích điều mà bản thân code không tự nói được. Những chú thích chỉ nhắc lại code sẽ làm rối mắt và thường trở nên lỗi thời khi code thay đổi.
// Bad: just repeats what the code obviously does
i = i + 1; // add one to i
// Better: explains the reason, which the code can't show
retries++; // back off and retry; the API is rate-limited at 5 req/sec
Hãy cố làm cho code dễ đọc bằng tên rõ ràng và cấu trúc hợp lý, và dành chú thích cho câu hỏi vì sao: ý định, sự đánh đổi, các trường hợp biên và đường dẫn tới ngữ cảnh. Nếu thấy mình phải viết chú thích để giải thích một dòng khó hiểu, đó thường là dấu hiệu nên đổi tên biến hoặc tách logic ra thành một hàm có tên rõ ràng.
Tiếp theo: biến
Giờ bạn đã biết cách chú thích code, khối xây dựng tiếp theo là lưu trữ dữ liệu. Trang tiếp theo nói về biến: cách khai báo, các kiểu có sẵn mà chúng chứa, và những quy tắc C++ áp đặt vì đây là ngôn ngữ kiểu tĩnh.
Câu hỏi thường gặp
Viết chú thích trong C++ như thế nào?
Dùng // cho chú thích một dòng: mọi thứ phía sau nó trên dòng đó đều bị trình biên dịch bỏ qua. Với chú thích trải dài nhiều dòng, đặt nội dung giữa /* và */. Ví dụ: // this is a note hoặc /* this spans lines */.
// và /* */ trong C++ khác nhau thế nào?
// biến phần còn lại của một dòng thành chú thích, nên dòng nào cũng cần có nó. /* */ là chú thích khối, bắt đầu từ /* và kéo dài tới */ kế tiếp, kể cả qua nhiều dòng. Dùng // cho ghi chú ngắn ngay trong dòng và /* */ để vô hiệu hóa cả một đoạn văn bản hoặc code cùng lúc.
Có thể lồng chú thích trong C++ không?
Không. Chú thích khối (/* */) không lồng nhau được: */ đầu tiên sẽ đóng chú thích, bất kể trước đó có bao nhiêu /*. Để vô hiệu hóa một vùng đã chứa sẵn chú thích khối, hãy đặt // ở đầu mỗi dòng (phần lớn trình soạn thảo làm việc này chỉ với một phím tắt).