0.11 – Настройка компилятора: уровни предупреждений и ошибок

Добавлено 27 марта 2021 в 16:24

Когда вы пишете свои программы, компилятор проверяет, соблюдаете ли вы правила языка C++ (при условии, что вы отключили расширения компилятора, как описано в уроке «0.10 – Настройка компилятора: расширения компилятора»).

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

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

Лучшая практика


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

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

В редких случаях может потребоваться явное указание компилятору не генерировать конкретное предупреждение для рассматриваемой строки кода. C++ не предоставляет официальный способ сделать это, но многие отдельные компиляторы (включая Visual Studio и GCC) предлагают решения (через непортируемые директивы #pragma) для временного отключения предупреждений.

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

Лучшая практика


Увеличьте уровень предупреждений до максимума, особенно во время обучения. Это поможет вам определить возможные проблемы.

Повышение уровня предупреждений

Для пользователей Visual Studio

Чтобы повысить уровень предупреждений, кликните правой кнопкой мыши на имени проекта в окне обозревателя решений и выберите Свойства:

Рисунок 1 Свойства проекта в обозревателе решений
Рисунок 1 – Свойства проекта в обозревателе решений

В диалоговом окне проекта сначала убедитесь, что в поле Конфигурация (Configuration) установлено значение Все конфигурации (All Configurations).

Затем кликните C/C++ → вкладка Общие (General) и установите Уровень предупреждений (Warning Level) на Уровень4 (/W4):

Рисунок 2 Включение уровня 4 для предупреждений в Visual Studio
Рисунок 2 – Включение уровня 4 для предупреждений в Visual Studio

Примечание: не выбирайте Включить все предупреждения (/Wall) (EnableAllWarnings (/Wall)), иначе вас завалит предупреждениями, генерируемыми стандартной библиотекой C++.

Для пользователей Code::Blocks

В меню меню Settings (Настройки) → Compiler (Компилятор) → вкладка Compiler Settings (Настройки компилятора) найдите и включите параметры, которые соответствуют параметрам -Wall, -Weffc++ и -Wextra:

Рисунок 3 Включение всех предупреждений в Code::Blocks
Рисунок 3 – Включение всех предупреждений в Code::Blocks

Затем перейдите на вкладку Other compiler options (Другие параметры компилятора) и добавьте -Wsign-conversion в текстовое поле:

Рисунок 4 Добавление -Wsign-conversion
Рисунок 4 – Добавление -Wsign-conversion

Примечание. Параметр -Werror объясняется ниже.

Для пользователей GCC/G++

Добавьте в командную строку следующие флаги: -Wall -Weffc++ -Wextra -Wsign-conversion.

Считайте предупреждения ошибками

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

Для пользователей Visual Studio

Чтобы рассматривать предупреждения как ошибки, кликните правой кнопкой мыши имя проекта в окне обозревателя решений и выберите Свойства:

Рисунок 1 Свойства проекта в обозревателе решений
Рисунок 5 – Свойства проекта в обозревателе решений

В диалоговом окне проекта сначала убедитесь, что в поле Конфигурация (Configuration) установлено значение Все конфигурации (All Configurations).

Затем кликните C/C++ → вкладка Общие (General) и установите для параметра Обрабатывать предупреждения как ошибки (Treat Warnings As Errors) значение Да(/WX) (Yes (/WX)).

Рисунок 6 Считать предупреждения ошибками в Visual Studio
Рисунок 6 – Считать предупреждения ошибками в Visual Studio

Для пользователей Code::Blocks

В меню меню Settings (Настройки) → Compiler (Компилятор) → вкладка Other compiler options (Другие параметры компилятора) добавьте -Werror в область редактирования текста:

Рисунок 7 Добавление -Werror в Code::Blocks
Рисунок 7 – Добавление -Werror в Code::Blocks

Для пользователей GCC/G++

Добавьте в командную строку флаг -Werror.

Теги

C++ / CppCode::BlocksIDELearnCppVisual StudioДля начинающихКомпиляторОбучениеПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.