Компиляторы C и C ++ будут генерировать предупреждение при сравнении типов со знаком и без знака; в вашем примере кода вы не можете сделать вашу переменную цикла неподписанной и заставить компилятор генерировать код без предупреждений (при условии, что указанные предупреждения были включены).
Естественно, вы компилируете с предупреждениями, включенными до конца, верно?
А не рассматривали ли вы компиляцию с «обработать предупреждения как ошибки», чтобы сделать еще один шаг вперед?
Недостатком использования чисел со знаком является то, что существует соблазн перегрузить их, так что, например, значения 0-> n являются выбором меню, а -1 означает, что ничего не выбрано - вместо создания класса с двумя переменными один, чтобы указать, если что-то выбрано, и другой, чтобы сохранить, что это за выбор. Прежде чем вы это узнаете, вы проверяете отрицательный результат повсеместно, и компилятор жалуется на то, как вы хотите сравнить выбор меню с количеством вариантов выбора, которые у вас есть - но это опасно, потому что они разных типов , Так что не делай этого.