Попередження компілятора


15

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

Як ви маєте справу з непоправними попередженнями? Ви переписуєте частину коду чи переписуєте його "довгим, безхарактерним способом" чи відключаєте попередження всі разом? Якою має бути найкраща практика?

Що робити, якщо ви редагуєте чужий код, і його код має попередження?

Ось хороший приклад: jQuery має багато попереджень JavaScript, як виявлений браузер класу Mozilla, чому розробники jQ їх не виправляють? Якщо ви робите внесок у jQuery, чи збираєтесь ви їх виправити?


7
Чи можете ви навести приклад непоправного попередження?
Зауважте, що самостійно - придумайте ім’я

1
Попередження за визначенням - це попередження. Тому його не потрібно "фіксувати". Отже, що таке непоправне попередження?
Грак

Використання загальних типів на Java часто створює попередження. Єдиний спосіб "виправити" це додати @Suppress, який не дуже чистий, IMO.
Майкл К

Відповіді:


25

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

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


8
Це. Я успадкував бази коду з колекціями попереджень пристойного розміру; жоден з них не є попередженнями для всього , що мені особливо не байдуже, але то , що я робити піклуватися про те , щоб бути в змозі побачити абсолютно новий «0 помилка (и), 1 попередження (s)» , коли я зробити що - то неправильно.
Carson63000

33

Моя думка, що ти повинен бути суворим із собою. Компілятор написаний загальними експертами з мови. Якщо вони повідомляють, що щось трохи роздвоєне (думають, що пахне кодом), код слід переглянути.

Цілком можливо написати код, який компілюється без помилок і без попереджень.


1
Я однозначно згоден!
Олов'яний чоловік

5
Я згоден. ОП: ви повинні прочитати про «розбиті вікна», як це було описано в «Прагматичному програмісті».
Ніхто


9

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

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

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


6

Я б виправив будь-яке попередження. Якщо ви проігноруєте їх і нехай вони накопичуються, ви насправді могли пропустити щось важливе.


4

Як правило, ви повинні прагнути до того, щоб компілятор замовк, щоб нові попередження виявляли більше. Ці застереження можуть вказувати на непомітні помилки і з ними слід поводитися відповідно.

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

Попросіть свого начальника і діяти відповідно.


2

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

Виправте попередження. Період. Це те, або документуйте кожну з них, маючи стільки сторінок пояснень, скільки потрібно, щоб довести, що це не ризик, супроводжуючись підписаним замовленням на продаж улюбленої подруги (або порно-скринькою), якщо виявиться, що це БУЛО ризик.


2

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

Сказавши це, іноді компілятори можуть мати попередження, які мають мало сенсу і які неможливо легко виправити. Я щодня стикаюся з цією ситуацією, працюючи з TI CodeComposer, що є середовищем розвитку для ЦІ ЦСП. У мене є код C ++, який компілюється без попереджень під Visual Studio, але це призводить до дивних попереджень у CodeComposer, просто тому, що підтримка TI для стандартного C ++ могла бути кращою. На щастя, CodeComposer дозволяє вам відключати окремі попередження окремо, що ми маємо робити, коли немає можливості виправити код, який створює попередження.


1

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

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

Отже: Майже у всіх випадках позбудьтеся хаків. Коли зламування справді виправдане, додайте коментар, в якому сказати, що PyLint добре.


1

Деякі переваги суворості не були чітко зазначені в інших відповідях:

  1. Коли всі легко зафіксовані попередження виправлені, інші значні / відповідні попередження, швидше за все, з’являться.
  2. Якщо відповідні попередження будуть знайдені та вирішені вчасно (до випуску), помилок можна уникнути, що призведе до кращого задоволення кінцевих користувачів
  3. Вирішення попередження зазвичай призводить до отримання більш простого і простішого коду (наприклад, усунення умов, які завжди відповідають дійсності)
  4. Коли кількість попереджень ближче до 0, легко погодитися з політикою нульових попереджень у команді, що в системі CI дуже легко автоматизувати.
  5. При вирішенні попереджень компілятора розуміння програмного коду поглиблюється, що може призвести до корисної інформації про реалізацію (наприклад, виявити інші помилки або отримати ідеї, як далі розробляти код)
  6. Збірка стає швидшою, щоденна продуктивність збільшується: IDE / компілятор має менше проблем для управління та звітування про них, тому компіляція швидша (це актуально лише в контексті тисяч попереджень).

Існують особливі мовні відмінності щодо певних видів попереджень. Я думаю, що важливо подумати і обговорити цю тему, а потім відключити деякі окремі попередження, якщо вони вважають себе абсолютно марними, щоб можна було досягти суворості. Це було досягнуто в кількох командах у моїй кар’єрі. Детальніше про мій досвід роботи з даної теми


-1

Попередження та помилки - це повідомлення, які компілятор використовує, щоб сказати програмісту "щось, що ви написали, не мало сенсу" - різниця між ними полягає в тому, що за допомогою попередження компілятор готовий здогадатися про наміри програміста, тоді як з помилкою компілятор навіть не може здогадатися.

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

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


1
Неправда, багато попереджень компілятора стосуються речей, які компілятор розуміє на 100% і не перебуває в потоці потоку (розумів його раніше, розуміє це зараз, зрозуміє в майбутньому), але є в досвіді авторів-компіляторів, часто написано неправильно. Ви невірно відповідаєте на 3-річне запитання ...
jmoreno
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.