Mục lục:
- Kích hoạt tất cả các cảnh báo và thông báo lỗi
- Là một lập trình viên, bạn phải hiểu chương trình của bạn đang làm gì. Không đủ để chương trình đưa ra giá trị kỳ vọng. Bạn cần phải hiểu tất cả mọi thứ chương trình của bạn đang làm. Không có gì giúp bạn cảm thấy tốt hơn về những gì đang diễn ra bên dưới mui xe hơn là
- Ngoài ra, khi bạn gỡ lỗi một chương trình, bạn cần nguyên liệu để tìm ra một số hành vi kỳ quặc có thể mọc lên khi chương trình chạy. Không có gì cung cấp cho bạn các tài liệu đó tốt hơn là chỉ đơn lẻ bước qua từng chức năng khi nó được đưa vào sử dụng.
- Việc mất bộ nhớ heap là lỗi phổ biến nhất trong các chương trình đã được phát hành trên thực địa - và đồng thời là vấn đề khó nhất để theo dõi và xóa. (Do loại lỗi này rất khó tìm và loại bỏ, nó phổ biến trong các chương trình bạn mua.) Bạn có thể phải chạy một chương trình hàng giờ trước khi các vấn đề bắt đầu phát sinh (phụ thuộc vào mức độ rò rỉ bộ nhớ là gì).
- Chỉ ra zero out sau khi xóa những gì họ trỏ đến
- Cơ chế ngoại lệ trong C ++ được thiết kế để xử lý các lỗi một cách thuận tiện và hiệu quả. Nói chung, bạn nên ném một chỉ báo lỗi chứ không phải trả lại một lá cờ lỗi. Mã kết quả dễ viết, đọc và duy trì. Bên cạnh đó, các lập trình viên khác đã mong đợi nó, và bạn sẽ không muốn làm họ thất vọng, đúng không?
- Đừng quên tạo một destructor cho lớp của bạn nếu constructor phân bổ các tài nguyên như heap memory cần phải trả lại khi đối tượng đạt đến sự chết. Đã tạo ra một destructor, đừng quên tuyên bố nó ảo.
- trở thành một lớp cơ sở trong tương lai. Trừ khi bạn có một số lý do chính đáng để không tuyên bố destructor ảo, sau đó làm như vậy khi bạn lần đầu tiên tạo ra các lớp học.
Video: Tránh Các Lỗi Thường Gặp Khi Cài Game Trên Win 10 2025
Thật là một điều không may là bạn sẽ dành nhiều thời gian tìm kiếm và gỡ bỏ lỗi hơn là bạn sẽ dành thật sự viết các chương trình C ++ của mình ở nơi đầu tiên. Các đề xuất ở đây có thể giúp bạn giảm thiểu số lỗi bạn đưa vào chương trình của mình để làm cho chương trình trở thành trải nghiệm thú vị hơn.
Kích hoạt tất cả các cảnh báo và thông báo lỗi
Cú pháp của C ++ cho phép kiểm tra lỗi rất nhiều. Khi trình biên dịch gặp một cấu trúc mà nó không thể giải mã, nó không có sự lựa chọn nào khác ngoài việc đưa ra một thông báo. Nó cố gắng đồng bộ hóa lại với mã nguồn (đôi khi ít hơn thành công), nhưng nó sẽ không tạo ra một thực thi. Điều này buộc các lập trình để sửa chữa tất cả các thông báo lỗi.
Vô hiệu hoá hoặc bỏ qua cảnh báo là một ý tưởng tồi tệ. Đó là một chút giống như tháo đèn "kiểm tra công cụ" trên bảng điều khiển xe của bạn bởi vì nó làm phiền bạn. Bỏ qua vấn đề không làm cho nó biến mất.Khi bạn đọc mã sạch sẽ và gọn gàng và theo một phong cách bạn quen thuộc, bạn dành rất ít sức mạnh của não để phân tích cú pháp cú pháp của câu lệnh C ++. Điều này làm cho CPU có thêm sức mạnh để giải mã chương trình đang cố gắng thực hiện chứ không phải là làm thế nào.
Sự khác biệt giữa tên lớp, tên đối tượng và tên hàm
Hiểu rõ lớp, chức năng hay đối tượng được sử dụng cho, dựa trên tên của nó
Phân biệt các biểu tượng tiền xử lý từ các ký hiệu C ++ (nghĩa là # xác định các đối tượng nên nổi bật)Xác định các khối mã C ++ ở cùng mức (đây là kết quả của sự nhất quán nhất quán)
-
In Ngoài ra, bạn cần thiết lập một định dạng tiêu chuẩn cho các tiêu đề mô đun cung cấp thông tin về các chức năng hoặc các lớp học trong mỗi mô-đun, tác giả, ngày, phiên bản, và một cái gì đó về lịch sử sửa đổi.
-
Tất cả các lập trình tham gia vào một dự án duy nhất nên sử dụng cùng kiểu mã hóa. Một chương trình được viết bằng một sự chắp vá các phong cách mã hóa khác nhau là khó hiểu và có vẻ không chuyên nghiệp.
-
Nhận xét mã khi bạn viết nó
-
Bạn có thể tránh lỗi nếu bạn bình luận mã của bạn trong khi viết nó, thay vì đợi cho đến khi mọi thứ hoạt động và sau đó quay lại và thêm ý kiến.
Việc xây dựng ý kiến buộc bạn phải ghi lại những gì bạn đang cố gắng làm. Ý kiến ngắn gọn đang được soi sáng, cả khi bạn đọc chúng sau đó và khi bạn viết chúng. Viết nhận xét như thể bạn đang nói chuyện với một lập trình viên có kiến thức khác.
Kéo từng đường dẫn trong trình gỡ lỗi ít nhất một lần
Là một lập trình viên, bạn phải hiểu chương trình của bạn đang làm gì. Không đủ để chương trình đưa ra giá trị kỳ vọng. Bạn cần phải hiểu tất cả mọi thứ chương trình của bạn đang làm. Không có gì giúp bạn cảm thấy tốt hơn về những gì đang diễn ra bên dưới mui xe hơn là
chương trình đơn bước, thực hiện từng bước một với một trình sửa lỗi tốt (như chương trình đi kèm với Code:: Blocks).
Ngoài ra, khi bạn gỡ lỗi một chương trình, bạn cần nguyên liệu để tìm ra một số hành vi kỳ quặc có thể mọc lên khi chương trình chạy. Không có gì cung cấp cho bạn các tài liệu đó tốt hơn là chỉ đơn lẻ bước qua từng chức năng khi nó được đưa vào sử dụng.
Cuối cùng, khi một chức năng đã hoàn thành và sẵn sàng để được thêm vào chương trình, mỗi con đường hợp lý cần phải được đi du lịch ít nhất một lần. Các lỗi dễ tìm thấy hơn nhiều khi bạn kiểm tra chức năng của chính nó hơn là sau khi nó đã được ném vào nồi với các chức năng còn lại - do đó, sự chú ý của bạn đã đi vào những thách thức lập trình mới. Giới hạn khả năng hiển thị Hạn chế tầm nhìn của lớp nội bộ đối với thế giới bên ngoài là một nền tảng của việc lập trình hướng đối tượng. Lớp học phải chịu trách nhiệm về trạng thái nội bộ của nó - nếu cái gì đó bị dính vào lớp học, thì đó là lỗi của lập trình viên lớp. Các lập trình viên ứng dụng nên lo lắng về việc giải quyết vấn đề trong tầm tay.
Cụ thể, khả năng hiển thị hạn chế có nghĩa là các thành viên dữ liệu không nên truy cập được bên ngoài lớp học - nghĩa là họ phải được đánh dấu là được bảo vệ. Ngoài ra, các chức năng thành viên mà phần mềm ứng dụng không cần biết cũng phải được đánh dấu bảo vệ. Không để lộ bất kỳ nội dung nào trong lớp hơn là cần thiết để hoàn thành công việc.
Theo dõi bộ nhớ heap
Việc mất bộ nhớ heap là lỗi phổ biến nhất trong các chương trình đã được phát hành trên thực địa - và đồng thời là vấn đề khó nhất để theo dõi và xóa. (Do loại lỗi này rất khó tìm và loại bỏ, nó phổ biến trong các chương trình bạn mua.) Bạn có thể phải chạy một chương trình hàng giờ trước khi các vấn đề bắt đầu phát sinh (phụ thuộc vào mức độ rò rỉ bộ nhớ là gì).
Theo nguyên tắc chung, các lập trình viên nên luôn luôn phân bổ và giải phóng bộ nhớ heap ở cùng mức ". "Nếu một thành viên MyClass chức năng:: create () phân bổ một khối bộ nhớ heap và trả lại nó cho người gọi, sau đó nên có một MyClass thành viên:: release () trả về heap.Cụ thể, MyClass:: create () không nên yêu cầu chức năng cha để giải phóng bộ nhớ.
Nếu có thể, MyClass sẽ tự theo dõi các con trỏ bộ nhớ đó và xóa nó trong destructor.
Chỉ ra zero out sau khi xóa những gì họ trỏ đến
Hãy chắc chắn rằng bạn không ra con trỏ sau khi chúng không còn giá trị; bạn làm như vậy bằng cách gán cho họ giá trị nullptr. Các lý do cho hành động này trở nên rõ ràng với kinh nghiệm: Bạn có thể tiếp tục sử dụng một khối bộ nhớ đã được trả lại cho đống và thậm chí không biết nó. Một chương trình có thể chạy tốt 99 phần trăm thời gian, làm cho rất khó để tìm thấy 1 phần trăm các trường hợp mà khối được tái phân bổ và chương trình không làm việc.
Nếu bạn bỏ các con trỏ không hợp lệ và bạn cố gắng sử dụng chúng để lưu trữ giá trị (bạn không thể lưu trữ bất cứ thứ gì ở hoặc gần vị trí null), chương trình của bạn sẽ sụp đổ ngay lập tức. Sự cố xảy ra có vẻ không ổn, nhưng nó không phải là vấn đề. Vấn đề là ở đó; nó chỉ đơn thuần là một câu hỏi liệu bạn có tìm thấy nó hay không trước khi đưa nó vào sản xuất.
Sử dụng ngoại lệ để xử lý lỗi
Cơ chế ngoại lệ trong C ++ được thiết kế để xử lý các lỗi một cách thuận tiện và hiệu quả. Nói chung, bạn nên ném một chỉ báo lỗi chứ không phải trả lại một lá cờ lỗi. Mã kết quả dễ viết, đọc và duy trì. Bên cạnh đó, các lập trình viên khác đã mong đợi nó, và bạn sẽ không muốn làm họ thất vọng, đúng không?
Giới hạn việc sử dụng ngoại lệ của bạn cho các lỗi thực sự. Không cần phải ném ra một ngoại lệ từ một chức năng mà trả về một chỉ báo "không làm việc" nếu đây là một phần của cuộc sống hàng ngày cho chức năng đó.
Khai báo destructors ảo
Đừng quên tạo một destructor cho lớp của bạn nếu constructor phân bổ các tài nguyên như heap memory cần phải trả lại khi đối tượng đạt đến sự chết. Đã tạo ra một destructor, đừng quên tuyên bố nó ảo.
"Nhưng," bạn nói, "lớp của tôi không được thừa kế từ bất cứ điều gì, và nó không bị phân lớp bởi một lớp khác. "Có, nhưng nó
có thể
trở thành một lớp cơ sở trong tương lai. Trừ khi bạn có một số lý do chính đáng để không tuyên bố destructor ảo, sau đó làm như vậy khi bạn lần đầu tiên tạo ra các lớp học.
Cung cấp một nhà xây dựng bản sao và nhà điều hành chuyển nhượng quá tải
Nếu lớp học của bạn cần một destructor, nó chắc chắn sẽ cần một nhà xây dựng bản sao và một nhà khai thác chuyển nhượng quá tải. Nếu nhà xây dựng của bạn phân bổ các tài nguyên như bộ nhớ heap, nhà thầu tạo bản sao mặc định và toán tử phân công sẽ không làm gì cả nhưng tạo ra sự tàn phá bằng cách tạo nhiều con trỏ tới cùng các tài nguyên. Khi destructor cho một trong những đối tượng này được gọi, nó sẽ khôi phục lại tài sản. Khi destructor cho các bản sao khác đi kèm, nó sẽ vít thứ lên.