Форум программистов, компьютерный форум CyberForum.ru

Типы ошибок(не синтактические) и что с ними делать. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вводишь текст, нажимаешь на кнопку и всё записывается в фаил(WinApi или Visual C++) http://www.cyberforum.ru/cpp-beginners/thread420910.html
Всем хай! Помогите написать простую програмулину. Например, форма, на ней техтбох, кнопка. Вводишь текст, нажимаешь на кнопку и всё записывается в фаил. Ну примерно так, если можно - то с комментариями. Сам C++ не знаю, хотя были попытки освоить, но больше нет желания связываться с этим языком. Вообщем вот, кого не затруднит, то помогите. Желательно на WINAPI или Visual C++.
C++ Чтение из файлов по "маске" Проблема такова: есть файл в котором описаны функции(они также объявлены и описаны в программе). Например: Func1(1,2); Func2(3,4); Как сделать, чтобы после прочтения 1-ой строки из файла, программа использовала функцию Func1 с параметрами 1 и 2, если это возможно? http://www.cyberforum.ru/cpp-beginners/thread420890.html
C++ подскажите мне ребят
решил начать писать программы на С/С++. Скачал среду как посаветано сдесь на форуме, Microsoft Visual C++ 2008 Express Edition with SP1, но не могу разобраться, где стартовый файлк чтобы запускать саму среду? Все папки облазел не нашел, подскажите пожайлуста!
объявить массив 5на5. 3аполнить массив '0' C++
а как объявить массив 5на5. 3аполнить массив '0'?
C++ Вывести список студентов с их оценками за разные предметы, со средним баллом студента http://www.cyberforum.ru/cpp-beginners/thread420866.html
ПОМОГИТЕ!! СРОЧНО! нужно написать список студентов с их оценками за разные предметы, со средним баллом студента! используя map и прочее.. я не понимаю, как это сделать.. кто-нибудь, можете ли вы помочь?
C++ Скалярное произведение двух массивов не могли бы подсказать, что в коде программы надо дописать, вышло только просто произведение #include <iostream> #include <stdlib.h> using namespace std; void mas_in(int* a, int size) { for(int i = 0; i < size; ++i) cin >> a; } void mas_out(int* a, int size) подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
30.12.2011, 19:57     Типы ошибок(не синтактические) и что с ними делать.
Вообще, есть много разной литературы, в которой описаны различные способы категоризации ошибок. Выбрать, который из них единственно правильный довольно трудно.

В языках, где ошибки перехватываются при помощи исключений (java, python...) обычно принято разделение на ошибки компиляции (compile time error) и ошибки времени выполнения (runtime error), причем ошибки времени выполнения (runtime error) можно условно разделить на восстановимые (recoverable) и невосстановимые (fatal).

Ошибки времени компиляции приводят к тому, что код не собирается в исполняемый файл, поэтому про них писать не буду.

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

Если во время выполнения произошла фатальная ошибка, например, невозможно подключиться к базе данных, без которой корректная работа программы немыслима, приложение нужно остановить (иногда перезапустить).

Опять-таки, это разделение довольно условно и не является каноническим.

В С++ не полностью реализованы исключения. Например, некоторые функции не генерируют исключения, а останавливают программу или возвращают некорректный результат. Поэтому, хотя механизм и есть, он довольно костыльный и для многих штук приходится писать обертки.
C++
1
2
if (someOperatrion(parameters) == -1)
  throw exception("Operation failed");
Но сам по себе механизм обработки исключений сильно облегчает жизнь.

Цитата Сообщение от Chelioss Посмотреть сообщение
А как насчет assert? Где исключения, а где асерты?
Assert это инструмент стандартной библиотеки языка С (не С++). Способ убедиться, что некое значение, критичное для выполнения программы истинно. В противном случае, вызывается abort и программа останавливается. Вообще хитрая штука, ибо генерит SIGABORT, выходит с ошибкой, не освобождает ресурсы, отключается #define NDEBUG и т.п.

Не стоит использовать в С++ коде, пользуйтесь исключениями.

Цитата Сообщение от Chelioss Посмотреть сообщение
Например, исключение при выходе за границу вектора. Сказать, что произошла ошибка и выключить программу?
Да.

Исключительная ситуация на то и исключительная. (ваш, К.О.) Если что-то может теоретически выйти за границу вектора, надо проверять условием. Если не может, это исключительная ситуация. Невосстановимая. Закрываемся.

Цитата Сообщение от Chelioss Посмотреть сообщение
Надо ли использовать исключения для этого типа ошибок? Может даже надо только исключения использовать?
Весьма желательно. Если это возможно, конечно. В С++ механизм исключений довольно корявый и кое-где, к сожалению, просто не выйдет опереться на этот механизм.

Цитата Сообщение от Chelioss Посмотреть сообщение
Для этого случая можно попробовать снова попробовать выделить память(наверно не всегда хороший вариант) или закрыть программу или еще что-нибудь.
Можно попытаться сделать эту ошибку восстановимой. Например, запустить собственный garbage collector или освободить память, очистив содержимое какого-нибудь кэша... Но в целом, закрываться.
 
Текущее время: 20:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru