Это только косвенная проблема.
Плохие вещи могут случиться, если вы используете целые числа со знаком для битовых операций, таких как &
, |
, <<
и >>
.
Совершенно разные плохие вещи могут произойти, если вы используете целые числа без знака для арифметики (недостаточное значение, бесконечные циклы при тестировании, если число равно >= 0
и т. Д.)
Из-за этого некоторые компиляторы и инструменты статической проверки будут выдавать предупреждения при смешивании целых чисел со знаком и без знака в любом типе операции (арифметическая или битовая манипуляция).
Хотя это может быть безопасно смешивать их в простых случаях, таких как ваш пример, если вы сделаете это, это означает, что вы не можете использовать эти инструменты статической проверки (или должны отключить эти предупреждения), что может означать, что другие ошибки остаются незамеченными.
Иногда у вас нет выбора, например, при выполнении арифметики со значениями типа size_t
в коде управления памятью.
В вашем примере я бы придерживался int
только потому, что проще иметь меньше типов, и в любом случае int
будет там, поскольку это тип первого аргумента main()
.