Это только косвенно проблема.
Плохие вещи могут случиться, если вы используете целые числа для битовых операций, таких как &
, |
, <<
и >>
.
Совершенно разные плохие вещи могут произойти, если вы используете целые числа без знака для арифметических операций (опустошений, бесконечных циклов при испытании, если число >= 0
и т.д.)
Из-за этого некоторые компилятор и инструменты статической проверки будут выдавать предупреждения, когда вы смешиваете (арифметические или битовые манипуляции).
Несмотря на то, что это может быть безопасно смешать их в простых случаях, например, в вашем примере, если вы это сделаете, это означает, что вы не можете использовать эти статические средства проверки (или должен отключить эти предупреждения), что может означать, что другие ошибки не обнаружены.
Иногда у вас нет выбора, например. при выполнении арифметики по значениям типа size_t
в коде управления памятью.
В вашем примере я бы придерживаться int
, только потому, что проще иметь меньше типов, а int
собирается быть там в любом случае, так как это тип первого аргумента main()
.
Не совсем обман, но стоит все равно прочитать: http://stackoverflow.com/questions/859943/c-how-can-i-fix-warnings-like-comparison-between-signed-and-unsigned – finnw