Урок №9. Налаштування компілятора: Попередження та помилки

  Юрій  | 

  Оновл. 16 Лип 2021  | 

 460

Сьогодні ми поговоримо про те, як підвищити рівень попереджень в компіляторах і змусити компілятор сприймати всі попередження так, наче це помилки.

Попередження в С++

На етапі компіляції компілятор перевіряє, чи відповідає ваш код правилам мови програмування C++. Якщо ви порушили синтаксис С++, то компілятор видасть вам помилку, надавши як номер рядка, який містить помилку, так і зміст самої помилки. Фактично, помилка може перебувати як в рядку, про який вам повідомив компілятор, так і в рядку перед ним. Після того, як ви визначили і виправили рядки коду з помилками, ви можете спробувати скомпілювати вашу програму ще раз.

Також трапляються ситуації, коли компілятор бачить код з помилками, але не до кінця в цьому впевнений (пам’ятайте, що суть філософії С++ полягає у виразі «Довіряй програмісту!»). У таких випадках компілятор може видати вам попередження. Попередження не зупиняють процес компіляції, але повідомляють програмісту, що щось пішло не так.

Порада: Не дозволяйте попередженням накопичуватися. Вирішуйте їх по мірі надходження (наче це помилки).

У більшості випадків попередження можуть бути усунені шляхом виправлення помилки, на яку вказує попередження, або шляхом переписування рядків коду, які генерують попередження, таким чином, щоб ці попередження більше не генерувалися.

Дуже рідко може знадобитися варіант явно вказати компілятору, щоб він не генерував конкретне попередження для поточного рядка коду. C++ не підтримує такий спосіб вирішення попереджень, але деякі компілятори (включаючи Visual Studio і GCC) надають можливість (через директиви #pragma) тимчасового вимкнення попереджень.

За замовчуванням більшість компіляторів генерують лише попередження про найбільш очевидні проблеми. Однак ви можете попросити ваш компілятор бути більш доскіпливим у генерації попереджень, повідомляючи про всі речі, які він вважає дивними.

Порада: Змініть рівень попереджень компілятора на вищий, особливо під час навчання. Це допоможе вам у визначенні та вирішенні можливих проблем.

Зміна рівня попереджень

Користувачам Visual Studio

Щоб підвищити рівень попереджень в Visual Studio, клацніть правою кнопкою миші по назві вашого проекту в "Обозреватель решений" > "Свойства":

В діалоговому вікні вашого проекту переконайтесь, що в пункті "Конфигурация" вибрано значення "Все конфигурации". Після цього перейдіть на вкладку "C/C++" > "Общие" і в пункті "Уровень предупреждений" виберіть значення "Уровень4 (/W4)":

Після цього натисніть на "Применить" і "ОК".

Примітка: Не вибирайте пункт "Включить все предупреждения (/Wall)", інакше ви будете “поховані” в попередженнях, які генеруються Стандартною бібліотекою C++.

Користувачам Code::Blocks

Перейдіть в меню "Settings" > "Compiler":

І на вкладці "Compiler settings" > "Compiler flags" поставте галочки біля наступних пунктів:

   Enable all common compiler warnings (overrides many other settings) [-Wall]

   Enable Effective-C++ warnings (thanks Scott Meyers) [-Weffc++]

   Enable extra compiler warnings [-Wextra]

Приклад:

Натисність "ОК" і після цього перейдіть на вкладку "Other compiler options" і додайте в область редагування текст -Wsign-conversion –Werror:

І натисність "Ок".

Примітка: Про параметр -Werror ми поговоримо трішки пізніше.

Користувачам GCC/G++

Додайте наступні флаги в ваш командний рядок:

-Wall -Weffc++ -Wextra -Wsign-conversion

Обробка попереджень як помилок

Ви також можете вказати вашому компілятору сприймати всі попередження, як помилки (в такому випадку компілятор зупинятиме процес компіляції, якщо знайде будь-які попередження). Це хороший варіант змусити себе виправляти всі попередження, особливо, якщо вам не вистачає самодисципліни (як і більшості із нас).

Користувачам Visual Studio

Щоб обробляти всі попередження як помилки, натисніть правою кнопкою миші по назві вашого проекту в "Обозреватель решений" > "Свойства":

В діалоговому вікні вашого проекту переконайтеся, що в полі "Конфигурация" вибрано значення "Все конфигурации". Після цього перейдіть на вкладку "C/C++" > "Общие" і в пункті "Обрабатывать предупреждения как ошибки" виберіть значення "Да(/WX)":

Після цього натисніть на "Применить" і "ОК".

Користувачам Code::Blocks

Перейдіть в меню "Settings" > "Compiler":

Після цього "Compiler settings" > "Other compiler options" і додайте -Werror в область редагування:

Після цього натисніть "ОК".

Користувачам GCC/G++

Додайте наступний флаг в ваш командний рядок:

-Werror

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (7 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *