Преобразование signed int
в unsigned int
- это то, что в стандарте C известно как «Обычное арифметическое преобразование», поэтому это не ошибка.
Причина, по которой компиляторы часто не выдают предупреждение об этом по умолчанию, заключается в том, что это так часто делается в коде, что в общем случае выдается слишком много предупреждений о ложных срабатываниях. Существует огромное количество кода, который работает со значениями signed int
, чтобы иметь дело с вещами, которые по своей природе не подписаны (например, для расчета размеров буфера). Также очень часто смешивать значения со знаком и без знака в выражениях.
Это не значит, что эти тихие преобразования не несут ответственности за ошибки. Таким образом, может быть неплохо включить предупреждение для нового кода, чтобы оно было «чистым» с самого начала. Тем не менее, я думаю, что вы, вероятно, сочтете довольно трудным иметь дело с предупреждениями, выданными существующим кодом.