Стандарты программирования на С++. 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". Обычно не возникает необходимость сравнивать или присваивать числа с разным типом знаковости. Измените типы сравниваемых переменных так, чтобы они соответствовали друг другу. В крайнем случае, воспользуйтесь явным преобразованием типов. (Компилятор все равно вставляет в код преобразование типов и предупреждает именно об этом, так что лучше сделать то же самостоятельно.)

Исключения

Иногда компилятор может выдавать утомительные, а порой и просто ложные предупреждения, но у вас нет способа их устранения (или такой способ заключается в нереальной или непроизводительной переделке текста программы). В таких редких случаях по решению всей команды разработчиков можно пойти на отключение конкретных мелких предупреждений, которые на самом деле не несут никакой особой информации и являются не более, чем результатом чрезмерной осторожности компилятора. Такие предупреждения можно отключить, но только данные конкретные предупреждения, а не все, максимально локализовав при этом область отключения и сопроводив ее ясным и подробным комментарием, почему такой шаг необходим.