Sử dụng biến trước khi intialization (hoặc chuyển nhượng) là nguyên nhân nghiêm trọng của lỗi. Bạn không thể kiểm tra nó một cách đáng tin cậy khi chạy, nhưng bạn có thể phát hiện nó trong hoặc trước khi biên dịch.
Tôi đề xuất không để kiểm tra bên trong mã. Bởi vì điều này có thể gây ra cảnh báo trình biên dịch (Biến 'i' được sử dụng trước khi nó được gán một giá trị), giới thiệu các lỗi mới và có rất ít cơ hội thành công trong các chương trình trung bình đến lớn.
Phương pháp tốt nhất là sử dụng các công cụ phân tích mã tĩnh (như QA/C hoặc PCLint). Sử dụng trình biên dịch ở mức nhạy cảm cảnh báo cao là tùy chọn miễn phí, với mức độ phù hợp thấp hơn nhiều so với các công cụ chuyên dụng.
Nếu bạn thực hiện đánh giá mã, bạn cũng có thể bao gồm kiểm tra các biến chưa được khởi tạo trên danh sách kiểm tra. Điều này không đảm bảo, nhưng nó sẽ kích hoạt kiểm tra thủ công từ người đánh giá.
Nếu đó là kiểm tra thời gian chạy bạn muốn, thì bạn có thể bắt đầu bằng cách intializing biến thành giá trị ngoài phạm vi. Ví dụ -1 cho một giá trị postive khác. Sau đó, bạn có thể kiểm tra
#define UNASSIGNED_VALUE -1
static int number_of_apples = UNASSIGNED_VALUE;
if (UNASSIGNED_VALUE == number_of_apples)
{
// error handling
}
đây không phải là biến 'không được xác định' thực sự, nhưng ít nhất bạn có thể phát hiện xem các phép gán thời gian trong phạm vi pháp lý có được thực hiện hay không.
Chủ đề này có một số cuộc thảo luận về điều này: http://stackoverflow.com/questions/473236/check-for-value-definedness-in-c – Laserallan