Правило 53: Обращайте внимание на предупреждения компилятора

Правило 53: Обращайте внимание на предупреждения компилятора

Многие программисты зачастую игнорируют предупреждения компилятора. В конце концов, если бы проблема была по-настоящему серьезной, компилятор выдал бы ошибку! Подобные рассуждения могут быть сравнительно безвредными при работе с какими-нибудь другими языками, но в отношении C++ можно поручиться, что создатели компиляторов точнее вас оценивают истинное положение дел. Например, ниже приведена ошибка, которую рано или поздно допускает каждый из нас:

class B {

public:

virtual void f() const;

};

class D: public B {

public:

virtual void f();

};

Предполагается, что функция D::f будет переопределять виртуальную функцию B::f, но ошибка состоит в следующем: в классе B функция-член f – константная, а в D она не объявляется как const. Один из известных мне компиляторов сообщает следующее:

warning: D::f() hides virtual B::f()

(предупреждение: D::f() скрывает virtual B::f())

Многие неопытные программисты, получив подобное сообщение, говорят себе: «Конечно, D::f скрывает B::f – так и должно быть!» Они неправы. Вот что пытается сказать компилятор: f, объявленная в B, не была объявлена повторно в D, а полностью спрятана (объяснение причины этого явления см. в правиле 33). Если оставить без внимания данное предупреждение, это почти наверняка приведет к ошибочному поведению программы, и, чтобы найти причину, потребуются долгие часы отладки – при том, что компилятор давно уже все обнаружил.

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

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

Что следует помнить

• Принимайте всерьез предупреждения компилятора и старайтесь добиться того, чтобы ваш код вообще не вызывал предупреждений, даже при задании максимального уровня диагностики.

• Не впадайте в зависимость от предупреждений компилятора, потому что разные компиляторы предупреждают о разных вещах. При переходе на новый компилятор могут пропасть некоторые предупреждения, на которые вы привыкли полагаться.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

11. Командные Строки Компилятора

Из книги C++ автора Хилл Мюррей

11. Командные Строки Компилятора Компилятор содержит препроцессор, способный выполнять макроподстановки, условную компиляцию и включение именованных файлов. Строки, начинающиеся с #, относятся к препроцессору. Эти строки имеют независимый от остального языка синтаксис;


Установка компилятора

Из книги Сборка Qt с использованием MinGW32 автора Литкевич Юрий

Установка компилятора Вам понадобится приблизительно 72 МиБ на диске, каталог для установки выбирайте так, чтобы путь не содержал пробелов и кирилицы. Далее каталог, где установлен компилятор, мы будем называть <MINGWDIR>Запустите установщик и следуйте


ВНИМАНИЕ!

Из книги Документация NetAMS автора Автор неизвестен

ВНИМАНИЕ! Данный набор документов представляет собой руководство по установке, настройке и использованию системы учета и управления трафиком NeTAMS. При его составлении мы постарались сделать все возможное, чтобы ваша работа с NeTAMS была по возможности более простой и


Изменение порога выдачи предупреждения о недостатке свободного места на диске

Из книги Реестр Windows автора Климов Александр

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


Настройка компилятора командной строки для C#

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Настройка компилятора командной строки для C# Чтобы использовать компилятор командной строки для C#, нужно, чтобы ваша система могла найти файл csc.exe. Если машина сконфигурирована неправильно, то при компиляции файлов C# вам придется указать полный путь к файлу csc.exe.Чтобы


11.6.5. Модель компилятора

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

11.6.5. Модель компилятора Программы, подобные компиляторам, не используют ни стандартный вывод, ни стандартный ввод; однако они способны отправлять сообщения об ошибках в соответствующий поток данных (stderr). Вместо этого программы данного типа принимают имена файлов или


11.6.5. Модель компилятора

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

11.6.5. Модель компилятора Программы, подобные компиляторам, не используют ни стандартный вывод, ни стандартный ввод; однако они способны отправлять сообщения об ошибках в соответствующий поток данных (stderr). Вместо этого программы данного типа принимают имена файлов или


Использование предупреждающих сообщений компилятора

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Использование предупреждающих сообщений компилятора Какое бы большое значение визуальная проверка кода ни играла для обнаружения и устранении любых проблем, связанных с переходом к Win64, всегда целесообразно использовать компилятор или какое-либо иное средство,


Параметры компилятора

Из книги Как заработать на фотографии в Интернете автора Зьомко Ольга

Параметры компилятора Последний класс операторов представляет собой инструкции для управления поведением компилятора VBA. К операторам, задающим параметры компилятора, относятся следующие. Оператор Выполняемое действие Option Base число Установка правила нумерации


Предупреждения и блокировка учетной записи

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

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


Тренировать внимание на компьютере?

Из книги Восстановление данных на 100% автора Ташков Петр Андреевич

Тренировать внимание на компьютере? «Допустим, это верно в отношении телевидения. Но ведь есть исследования, которые показывают, что внимание можно даже тренировать на компьютере!» — возразят мне в этом месте те, кто охотно сидит перед компьютером и расстреливает


Принципы предупреждения потерь

Из книги автора

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