Kompilatory C i C ++ wygenerują ostrzeżenie podczas porównywania typów podpisanych i niepodpisanych; w przykładowym kodzie nie można było zrobić zmiennej pętli bez znaku i kazać kompilatorowi wygenerować kod bez ostrzeżeń (zakładając, że te ostrzeżenia były włączone).
Oczywiście kompilujesz z ostrzeżeniami ustawionymi do góry, prawda?
I czy rozważałeś kompilację z „traktuj ostrzeżenia jako błędy”, aby pójść o krok dalej?
Wadą używania liczb ze znakiem jest to, że istnieje pokusa, aby je przeładować, tak aby na przykład wartości 0-> n były wyborem menu, a -1 oznacza, że nic nie zostało wybrane - zamiast tworzyć klasę, która ma dwie zmienne, jedną do wskaż, czy coś jest zaznaczone, a inne, aby zapisać, co to jest. Zanim się zorientujesz, wszędzie testujesz negatywny wynik, a kompilator narzeka, że chcesz porównać wybór menu z liczbą opcji menu, które masz - ale jest to niebezpieczne, ponieważ są to różne typy . Więc nie rób tego.