от
Исключения в C не надо быть пойман (нет ошибки времени компиляции) путем вызова функции. Так что решение разработчиков, то ли ловить их с помощью try и catch (в отличии от Java). Есть ли способ, можно гарантировать, что брошенный исключения всегда ловят на попробовать/поймать функцией вызова?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

8 Ответы

0 голосов
от
Исключения в C не надо быть пойман (нет ошибки времени компиляции) путем вызова функции. Так что решение разработчиков, то ли ловить их с помощью try и catch (в отличии от Java). Есть ли способ, можно гарантировать, что брошенный исключения всегда ловят на попробовать/поймать функцией вызова?
0 голосов
от
Нет. Посмотреть прагматичный взгляд на спецификации исключений для причины, почему нет. Только так вы сможете "помочь" это в документе исключения функция может бросить, сказать в качестве комментария в файл заголовка объявив его. Это не требует от компилятора или что-нибудь. Используйте код комментариев для этой цели.
0 голосов
от
Вы не должны использовать здесь исключение. Это, очевидно, не является исключительным случаем, если вам нужно будет ждать его везде, где вы используете эту функцию! Лучшим решением будет получить функцию, чтобы возвратить экземпляр что-то вроде этого. В построениях отладки (предполагая, что разработчики упражнение путей кода они только что написали), они получат утверждения, если они забывают, чтобы проверить, является ли операция успешно или нет.
class SearchResult
{
  private:
    ResultType result_;
    bool succeeded_;
    bool succeessChecked_;

  public:
    SearchResult(Result
0 голосов
от
Выходит за рамки вашего вопроса, так я рассуждал, а не проводка это, но в Java есть на самом деле 2 типов исключений, проверяемые и непроверяемые. Основным отличием является то, что, как и в
c[  ]
, вы не должны поймать исключение непроверенное. За хорошую рекомендацию попробовать это
0 голосов
от
Крис, вероятно, имеет лучший чистый ответ на вопрос: Однако, мне любопытно корень вопроса. Если у пользователя всегда должны обернуть вызов в try/catch блок, если пользователь называемая функция действительно быть исключения в первую очередь? Это сложно ответить на этот вопрос без контекста относительно базы исходного кода в вопрос. Стрельба от бедра, я думаю, что лучшим ответом здесь является, чтобы обернуть функцию такую, что рекомендуется (если не только, в зависимости от общего стиля исключением кода) открытый интерфейс делает блок try/catch для пользователей. Если ты просто пытаешься убедиться, что нет необработанных исключений в коде, тестов и анализа кода, вероятно, лучшее решение.
0 голосов
от
Есть ли способ, можно гарантировать, что исключений всегда ловится с помощью try и catch в вызывающем функция? Я нахожу это довольно забавно, что Java толпы - в том числе и я - пытается избежать проверенные исключения. Они пытаются найти свой путь вокруг вынуждены ловить исключения с помощью RuntimeExceptions.
0 голосов
от
Была когда-то попытка добавить динамические спецификации исключений в сигнатуру функций, но так как язык не может обеспечить их точность, они потом обесценились. В C 11 и вперед, у нас теперь есть описатель noexcept. Опять же, если подпись помечается, чтобы бросить, еще не requriement, что это быть вызывающим. В зависимости от контекста, вы можете гарантировать, что исключительное поведение быть обработаны путем кодирования его в систему типа. См.: СТД::опционально, как часть библиотеки основы.
0 голосов
от
Или вы могли бы начать бросать критические исключения. Конечно, исключение нарушения прав доступа будет привлекать внимание ваших пользователей.
...