У нас была ошибка в коде, идущий от линииC++: требуется предупреждение для: unsigned int i = -1;
unsigned int i = -1;
Когда код был написан, это был i = 0
и, таким образом, правильно. Используя -Wall -Wextra
, я был немного удивлен, что gcc не предупредил меня здесь, потому что -1 не вписывается в unsigned int.
Только при включении -Wsign-conversion
эта линия становится предупреждением - но с ней много ложных срабатываний. Я использую стороннюю библиотеку, которая выполняет операции с массивом с подписанными int (хотя они не могут быть < 0), поэтому всякий раз, когда я смешиваю это, например. вектор, я получаю предупреждения - и я не вижу смысла добавлять миллионы призов (и даже сторонние заголовки производят много предупреждений). Поэтому для меня слишком много предупреждений. Все эти предупреждения состоят в том, что преобразование «может изменить знак». Это нормально, потому что я знаю, что это происходит не во всех случаях.
Но с назначением, упомянутым выше, я получаю то же предупреждение «может измениться». Разве это не должно быть «обязательно изменит знак!» вместо «может измениться»? Есть ли способ выбросить предупреждения только для этих случаев «изменит», а не для возможных случаев?
Даже определенные изменения знака часто используются намеренно. Например, 'std :: string' имеет' static const size_type npos = -1; '. – interjay
[-1 используется с неподписанными типами] (http: // stackoverflow.com/q/22801069/1708801), так как результат полностью определяется стандартом. –
используя unsigned, чтобы убедиться, что переменная не будет отрицательной, является другой ошибкой: D –