Зараз у дискусії comp.lang.c ++ ведеться дискусія про те, чи слід твердження, які в C ++ існують лише у налагодженнях за замовчуванням, слід зберігати у виробничому коді чи ні.
Очевидно, кожен проект унікальний, тому моє запитання тут не стільки в тому, чи слід дотримуватися тверджень, а в яких випадках це рекомендується / не є хорошою ідеєю.
Під твердженням я маю на увазі:
- Перевірка під час виконання тесту, яка перевіряє стан, який, коли виявляється помилковим, виявляє помилку в програмному забезпеченні.
- Механізм, за допомогою якого програма зупиняється (можливо, після дійсно мінімальної роботи з очищення).
Я не обов'язково говорю про C або C ++.
Моя власна думка полягає в тому, що якщо ви програміст, але не володієте даними (як це стосується більшості комерційних настільних додатків), вам слід тримати їх, тому що, якщо невдале твердження показує помилку, вам не слід йти з помилкою, ризик зіпсувати дані користувача. Це змушує вас сильно протестувати перед відправкою та робить помилки більш видимими, таким чином, їх простіше помітити та виправити.
Яка ваша думка / досвід?
Ура,
Карл
Дивіться відповідне запитання тут
Відповіді та оновлення
Гей, Грем,
Твердження є помилковим, чистим і простим, і тому слід поводитися як один. Оскільки з помилкою слід звертатися в режимі випуску, то твердження вам дійсно не потрібні.
Ось чому я віддаю перевагу слову «жучок», коли говорять про твердження. Це робить речі набагато зрозумілішими. Для мене слово "помилка" занадто розпливчасте. Файл, що відсутній - це помилка, а не помилка, і програма повинна з цим боротися. Спроба знеструмити нульовий покажчик - це помилка, і програма повинна визнати, що щось пахне поганим сиром.
Отже, слід перевірити покажчик із твердженням, але наявність файлу з нормальним кодом обробки помилок.
Трохи поза темою, але важливий момент у дискусії.
Як наголос, якщо ваші твердження пробиваються до налагоджувача, коли вони не спрацьовують, чому б ні. Але є безліч причин, чому файл не міг існувати, які повністю перебувають під контролем вашого коду: права читання / запису, диск повністю, відключений USB-пристрій і т. Д. Оскільки ви не маєте контролю над цим, я вважаю, що це не правильний спосіб боротьби з цим.
Карл
Томас,
Так, у мене є Code Complete, і я повинен сказати, що я абсолютно не згоден з цією порадою.
Скажіть, що ваш спеціальний розподільник пам’яті накрутив і нулює шматок пам’яті, який все ще використовується деяким іншим об’єктом. Мені здається нульовим покажчиком, що цей об'єкт регулярно відмінюється, і одне з інваріантів полягає в тому, що цей покажчик ніколи не буває нульовим, і у вас є кілька тверджень, щоб переконатися, що він залишається таким. Що робити, якщо вказівник раптом є нульовим. Ви просто якщо () навколо нього, сподіваючись, що він працює?
Пам'ятайте, ми тут говоримо про товарний код, тому немає нарви на налагоджувач та перевірку місцевого стану. Це справжня помилка на машині користувача.
Карл