Vì vậy, tôi chạy vào một vấn đề lớn tại nơi làm việc vì tôi đã có một cái gì đó như thế này trong mã của tôi:Objective C: Unsigned int so sánh
int foo = -1;
NSArray *bar = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];
if (foo > [bar count]){
NSLog(@"Wow, that's messed up.");
} else {
NSLog(@"Rock on!");
}
Như bạn có thể đã biết bởi tôi gửi bài này, đầu ra là:
"Ồ, điều đó đã sai lầm."
Từ những gì tôi thu thập, mục tiêu C đang chuyển đổi số âm của tôi thành int "đã ký" và do đó, làm giảm so sánh của tôi.
Tôi đã xem các bài đăng khác về vấn đề này và tất cả đều nêu rõ vấn đề là gì nhưng không ai trong số họ đề xuất bất kỳ giải pháp đơn giản nào để so sánh này thực sự hoạt động. Ngoài ra, tôi bị sốc rằng không có cảnh báo trình biên dịch, vì đây là những vấn đề nghiêm trọng đối với tôi.
Có một cảnh báo trình biên dịch cho điều này nhưng nó không được bật theo mặc định. Chuyển đến tab Cài đặt Xây dựng cho mục tiêu của bạn và tìm kiếm "So sánh Đăng nhập". Bật cảnh báo trình biên dịch đó. Điều này có thể dẫn đến rất nhiều cảnh báo. – rmaddy
Bạn có thể muốn xem xét lại mã của bạn có nghĩa là gì để làm, vì vì 'count' là unsigned mệnh đề if của bạn về cơ bản là một nhánh chết và có thể được gỡ bỏ. – axiixc
Tôi đang lặp qua một mảng bằng cách nhấn các nút "tiếp theo" hoặc "trước" thay đổi biến chỉ mục. Các giá trị mảng cần phải lặp lại, vì vậy khi chỉ mục nhỏ hơn 0, nó sẽ được đặt thành phần tử cuối cùng trong mảng. Nếu chỉ số lớn hơn chiều dài mảng, nó sẽ được đặt thành 0. Vì vậy, có thể có thể là một tình huống mà chỉ mục là -1 và tôi so sánh nó với chiều dài mảng như được hiển thị ở trên. –