tôi tiếp tục nhận lỗi Clang vào loại mã sau đây và tôi không thể tìm ra lý do tại sao họ đang sai lầm hoặc làm thế nào để giải quyết chúng để thỏa mãn Clang của:Lỗi Clang về "Ngưỡng rỗng tiềm năng".
+ (NSString *)checkForLength: (NSString *)theString error: (NSError **)error {
BOOL hasLength = ([theString length] > 0);
if (hasLength) return theString;
else {
*error = [NSError errorWithDomain:@"ErrorDomain" code:hasLength userInfo:nil];
return nil;
}
}
Gác lại những tính chất hoàn toàn-giả tạo của ví dụ (mà Clang đã làm đối tượng để nó đủ minh họa), Clang balks tại đường phân công lỗi với các phản đối sau đây:
Tiềm năng rỗng dereference. Theo các tiêu chuẩn mã hóa trong 'Tạo và trả lại'
NSError
'Tham số' lỗi 'của đối tượng có thể là rỗng.
Tôi thích có báo cáo Clang nguyên sơ. Tôi đã đọc tài liệu được trích dẫn và tôi không thể nhìn thấy một cách để làm những gì mong đợi; Tôi đã kiểm tra một số thư viện Cocoa nguồn mở và điều này có vẻ là một thành ngữ phổ biến. Bất kỳ ý tưởng?
Rất tiếc, tôi không thể tin rằng mình đã bỏ lỡ điều đó. Cảm ơn! – bbrown
Tôi đã sử dụng một triệu lần 'if (error) * error =…' thay vào đó, mà không có bất kỳ sự cố hoặc phân tích lỗi/cảnh báo nào. Tôi có thể tiếp tục theo cách này không? –
Có, sự tương đương rõ ràng của một con trỏ null đến 0 và sai là mục tiêu C giữ nguyên từ C. Tôi cá nhân nghĩ rằng đó là kiểu xấu, nhưng vâng bạn chỉ có thể sử dụng 'if (error)' nếu bạn thực sự muốn. –