Стандарты программирования на С++. 101 правило и рекомендация | страница 10
>// Предупреждение: "переменная 'lock' определена, но не
>// используется"
>void Fun() {
> Lock lock;
> // ...
>}
>// новая версия: предупреждение не должно выводиться
>void Fun() {
> Lock lock;
> lock;
> // ...
>}
Пример 4. "Переменная может использоваться, не будучи инициализированной". Инициализируйте переменную (см. рекомендацию 19).
Пример 5. "Отсутствует return". Иногда компиляторы требуют наличия инструкции >return
несмотря на то, что поток управления не может достичь конца функции (например, при наличии бесконечного цикла, инструкции throw, других инструкций >return
). Такое предупреждение не стоит игнорировать, поскольку вы можете только думать, что управление не достигает конца функции. Например, конструкция >switch
, у которой нет выбора >default
, при внесении изменений в программу может привести к неприятностям, так что следует иметь выбор >default
, который просто выполняет >assert(false)
(см. также рекомендации 68 и 90):
>// предупреждение: отсутствующий "return"
>int Fun(Color C) {
> switch(C) {
> case Red: return 2;
> case Green: return 0;
> case Blue:
> case Black: return 1;
> }
>}
>// Новая версия: предупреждение устранено
>int Fun(Color C) {
> switch(C) {
> case Red: return 2;
> case Green: return 0;
> case Blue:
> case Black: return 1;
> // Значение !"string" равно false:
> default: assert(!"should never get here!");
> return -1;
> }
>}
Пример 6. "Несоответствие >signed
/>unsigned
". Обычно не возникает необходимость сравнивать или присваивать числа с разным типом знаковости. Измените типы сравниваемых переменных так, чтобы они соответствовали друг другу. В крайнем случае, воспользуйтесь явным преобразованием типов. (Компилятор все равно вставляет в код преобразование типов и предупреждает именно об этом, так что лучше сделать то же самостоятельно.)
Иногда компилятор может выдавать утомительные, а порой и просто ложные предупреждения, но у вас нет способа их устранения (или такой способ заключается в нереальной или непроизводительной переделке текста программы). В таких редких случаях по решению всей команды разработчиков можно пойти на отключение конкретных мелких предупреждений, которые на самом деле не несут никакой особой информации и являются не более, чем результатом чрезмерной осторожности компилятора. Такие предупреждения можно отключить, но только данные конкретные предупреждения, а не все, максимально локализовав при этом область отключения и сопроводив ее ясным и подробным комментарием, почему такой шаг необходим.