Правило 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). Если оставить без внимания данное предупреждение, это почти наверняка приведет к ошибочному поведению программы, и, чтобы найти причину, потребуются долгие часы отладки – при том, что компилятор давно уже все обнаружил.
По мере того как вы приобретете опыт работы с предупреждениями конкретного компилятора, уже нетрудно будет понимать, что означают различные сообщения (к сожалению, нередко реальное значение сообщения кардинально отличается от предполагаемого). Потренировавшись, вы впоследствии сможете спокойно игнорировать целый ряд предупреждений, хотя обычно лучше писать код, при компиляции которого компилятор не выдает никаких предупреждений, даже при выборе наивысшего уровня диагностики. Как бы то ни было, прежде чем отклонить предупреждение, важно убедиться, что вы точно вникли в его смысл.
Раз уж мы затронули тему предупреждений, стоит заметить, что они по своей природе зависимы от реализации, поэтому не следует слишком расслабляться и перекладывать на компилятор обнаружение ваших ошибок. Например, код с сокрытием функции, приведенный выше, проходит через другой (к сожалению, широко распространенный) компилятор без каких-либо предупреждений.
Что следует помнить
• Принимайте всерьез предупреждения компилятора и старайтесь добиться того, чтобы ваш код вообще не вызывал предупреждений, даже при задании максимального уровня диагностики.
• Не впадайте в зависимость от предупреждений компилятора, потому что разные компиляторы предупреждают о разных вещах. При переходе на новый компилятор могут пропасть некоторые предупреждения, на которые вы привыкли полагаться.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Использование предупреждающих сообщений компилятора
Использование предупреждающих сообщений компилятора Какое бы большое значение визуальная проверка кода ни играла для обнаружения и устранении любых проблем, связанных с переходом к Win64, всегда целесообразно использовать компилятор или какое-либо иное средство,
ВНИМАНИЕ!
ВНИМАНИЕ! Данный набор документов представляет собой руководство по установке, настройке и использованию системы учета и управления трафиком NeTAMS. При его составлении мы постарались сделать все возможное, чтобы ваша работа с NeTAMS была по возможности более простой и
Изменение порога выдачи предупреждения о недостатке свободного места на диске
Изменение порога выдачи предупреждения о недостатке свободного места на диске Если на вашем диске остается свободным менее 10% (по умолчанию) места, то система информирует об этом появлением иконки в области уведомления (рядом с часиками). На дисках маленькой емкости этот
Установка компилятора
Установка компилятора Вам понадобится приблизительно 72 МиБ на диске, каталог для установки выбирайте так, чтобы путь не содержал пробелов и кирилицы. Далее каталог, где установлен компилятор, мы будем называть <MINGWDIR>Запустите установщик и следуйте
Параметры компилятора
Параметры компилятора Последний класс операторов представляет собой инструкции для управления поведением компилятора VBA. К операторам, задающим параметры компилятора, относятся следующие. Оператор Выполняемое действие Option Base число Установка правила нумерации
11.6.5. Модель компилятора
11.6.5. Модель компилятора Программы, подобные компиляторам, не используют ни стандартный вывод, ни стандартный ввод; однако они способны отправлять сообщения об ошибках в соответствующий поток данных (stderr). Вместо этого программы данного типа принимают имена файлов или
11.6.5. Модель компилятора
11.6.5. Модель компилятора Программы, подобные компиляторам, не используют ни стандартный вывод, ни стандартный ввод; однако они способны отправлять сообщения об ошибках в соответствующий поток данных (stderr). Вместо этого программы данного типа принимают имена файлов или
Настройка компилятора командной строки для C#
Настройка компилятора командной строки для C# Чтобы использовать компилятор командной строки для C#, нужно, чтобы ваша система могла найти файл csc.exe. Если машина сконфигурирована неправильно, то при компиляции файлов C# вам придется указать полный путь к файлу csc.exe.Чтобы
11. Командные Строки Компилятора
11. Командные Строки Компилятора Компилятор содержит препроцессор, способный выполнять макроподстановки, условную компиляцию и включение именованных файлов. Строки, начинающиеся с #, относятся к препроцессору. Эти строки имеют независимый от остального языка синтаксис;
Предупреждения и блокировка учетной записи
Предупреждения и блокировка учетной записи После того как регистрация завершена, а все экзамены пройдены, приходит время браться за фотоаппарат и включаться в обычные рабочие будни микростокового фотографа. Но ни в коем случае не стоит расслабляться. Постарайтесь
Принципы предупреждения потерь
Принципы предупреждения потерь Предупреждение потерь информации – система и политика. Неважно, идет речь о корпорации или об отдельно взятой семье с единственным компьютером – везде необходим комплекс решений. Все отличие состоит лишь в том, что эти решения могут быть
Тренировать внимание на компьютере?
Тренировать внимание на компьютере? «Допустим, это верно в отношении телевидения. Но ведь есть исследования, которые показывают, что внимание можно даже тренировать на компьютере!» — возразят мне в этом месте те, кто охотно сидит перед компьютером и расстреливает