В чем разница между ловушкой, ошибкой, неудачей и программным прерыванием?

Я часто вижу следующие термины в интервью C ++:

  • отмена программы
  • ошибка
  • отказ
  • ловушка

Я не уверен, что ясно вижу различия между этими терминами. Может ли кто-нибудь дать четкое краткое объяснение?

Редактировать : контекстный вопрос был: «Что происходит, когда вы дважды удаляете указатель?«но знание различий между этими терминами для меня важнее, чем просто ответ.

9

Решение

Это на самом деле не относится к C ++.

  • Прервать — это когда вы завершаете программу или конкретную операцию из-за проблемы. Есть функция библиотеки C ++ std::abort, унаследовано от библиотеки C, которая как бы убивает программу внешним сигналом и не запускает деструкторы или очистку.

  • Ошибка, когда что-то идет не так. В C ++ многие виды ошибок не обязательно обнаруживаются сразу. C ++ вместо этого указывает неопределенное поведение, что может повлечь за собой тихое повреждение памяти, которое позже может вызвать таинственное неправильное поведение.

  • Ошибка — это когда программа делает не то, что нужно. Это довольно общий инженерный термин. Пышноволосый босс, вероятно, более знаком с этой концепцией, чем другие, потому что это единственный, о котором клиент действительно знает.

  • Ловушка — это когда программа обнаруживает состояние ошибки и предпринимает соответствующие действия.

Поэтому, если вы обнаружите, что сеть вышла из строя, и покажете пользователю сообщение, такое как «Не удалось продолжить; ваш документ был автоматически сохранен» перед выходом, то вы поймали ошибку и прервали ее, но, тем не менее, произошел сбой.

4

Другие решения

Все эти термины немного расплывчаты, особенно ошибки и неудачи. Они в основном означают одно и то же: что-то не так. Прерывание программы, вероятно, относится к вызову стандарта библиотеки C выкинуть функция, которая вызывает сигнал SIGABRT. Это обычно приводит к неблаговидному завершению программы, но зависит от платформы и от того, пойман ли сигнал. Trap может относиться к перехвату сигнала в целом, который контролируется стандартом библиотеки C сигнал функция.

0

По вопросам рекламы [email protected]