30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
1

Обработка исключений

23.01.2015, 20:17. Показов 3061. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
что то я не пойму а что в плюсах нельзя разве сделать что то типа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
try
{
...
}
catch (int)
{
...
}
__finally
{
...
}
просто когда сразу и catch и __finally используешь ошибки выбивает
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2015, 20:17
Ответы с готовыми решениями:

Обработка исключений с пмощью структурированной обработки исключений
Есть функция, которая определенным образом работает с файлами,но при работе с файлами "не...

Обработка исключений
Объясните мне толком для чего используются эти обработки исключений (Try, catch, throw). Сколько...

Обработка исключений
Доброго времени суток. Использую RAD XE 4. Пытаюсь поймать исключения путем catch(Exeption...

Обработка исключений
Здравствуйте, мне нужно проанализировать ведённый номер телефона методом обработка исключений....

34
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
23.01.2015, 20:30 2
В C++ нет блока finally.
0
Эксперт С++
4984 / 3091 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.01.2015, 20:32 3
Цитата Сообщение от Dark Byte Посмотреть сообщение
просто когда сразу и catch и __finally используешь ошибки выбивает
Может стоит показать пример и ошибки, или нам стоит погадать... ну, например, на гуще кофейной?
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
23.01.2015, 20:44  [ТС] 4
Цитата Сообщение от Prorok2323 Посмотреть сообщение
В C++ нет блока finally.
зато есть __finally
Цитата Сообщение от castaway Посмотреть сообщение
Может стоит показать пример и ошибки, или нам стоит погадать... ну, например, на гуще кофейной?

Не по теме:

тыжпрограммист, гадание входит в способности :D


а серьезно, в билдере у меня просто ошибка "expression syntax" и все... а в msvs щас затестил "error C3273: __finally: не разрешен для блока try C++"
0
Неэпический
17850 / 10618 / 2049
Регистрация: 27.09.2012
Сообщений: 26,689
Записей в блоге: 1
23.01.2015, 20:53 5
Цитата Сообщение от Dark Byte Посмотреть сообщение
зато есть __finally
то есть это
The try-finally statement is a Microsoft extension to the C and C++ languages
Вас не смущает?
Да, в студии есть __finally, только тогда не try, а __try
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
23.01.2015, 21:20  [ТС] 6
Цитата Сообщение от Croessmah Посмотреть сообщение
то есть это
The try-finally statement is a Microsoft extension to the C and C++ languages
Вас не смущает?
Да, в студии есть __finally, только тогда не try, а __try
__________________
не заметил... ну все равно тогда с этим __try не хочет работать catch, а как работает __exception я не понимаю... мне просто очень хотелось бы совместить и try и catch (или exception, короче что то похожее) и finally... т.е. алгоритм такой: выполняется код, если ошибка то catch (или еще что то) и в конце в любом случае выполняется блок finally... привык с дельфей еще так с файлами работать (в финале закрытие)

Добавлено через 18 минут
подчеркиваю ! проблема не решена !

также еще такая проблема, вот код, почему при не открывшемся файле (не существует) вместо того чтобы заходить в блок catch он просто выбивает ошибку? (проверял отладчиком точно не заходит)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
    FILE* fp = fopen("test", "rb");
    try
    {
        int n(0);
        fread(&n, sizeof(n), 1, fp);
    }
    catch (int)
    {
        std::cout << "error";
    }
    system("pause");
    return EXIT_SUCCESS;
}
0
2441 / 1839 / 406
Регистрация: 15.12.2013
Сообщений: 8,228
23.01.2015, 21:30 7
А fopen разве выбрасывает исключение?
1
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
23.01.2015, 21:37  [ТС] 8
Цитата Сообщение от S_el Посмотреть сообщение
А fopen разве выбрасывает исключение?
fopen сроду никогда никаких исключений не выбрасывал... если не получилось открыть он просто возвращает нулевой указатель

Добавлено через 50 секунд
я имею ввиду исключение в моем коде должно бросаться на попытке чтения с нулевого указателя, там и возникает ошибка, но она не заходит в блок catch, почему?
0
2441 / 1839 / 406
Регистрация: 15.12.2013
Сообщений: 8,228
23.01.2015, 21:37 9
Цитата Сообщение от Dark Byte Посмотреть сообщение
fopen сроду никогда никаких исключений не выбрасывал... если не получилось открыть он просто возвращает нулевой указатель
Тогда чего вы ждете от блока catch?
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
23.01.2015, 21:38  [ТС] 10
Цитата Сообщение от S_el Посмотреть сообщение
Тогда чего вы ждете от блока catch?
Цитата Сообщение от Dark Byte Посмотреть сообщение
Добавлено через 50 секунд
я имею ввиду исключение в моем коде должно бросаться на попытке чтения с нулевого указателя, там и возникает ошибка, но она не заходит в блок catch, почему?
3 символа
0
2441 / 1839 / 406
Регистрация: 15.12.2013
Сообщений: 8,228
23.01.2015, 21:39 11
Цитата Сообщение от Dark Byte Посмотреть сообщение
я имею ввиду исключение в моем коде должно бросаться на попытке чтения с нулевого указателя, там и возникает ошибка, но она не заходит в блок catch, почему?
Перефразирую.Почему вы решили,что функция fread бросает исключения?
0
Неэпический
17850 / 10618 / 2049
Регистрация: 27.09.2012
Сообщений: 26,689
Записей в блоге: 1
23.01.2015, 21:40 12
Цитата Сообщение от Dark Byte Посмотреть сообщение
т.е. алгоритм такой: выполняется код, если ошибка то catch (или еще что то) и в конце в любом случае выполняется блок finally... привык с дельфей еще так с файлами работать (в финале закрытие)
C++
1
2
3
4
5
6
7
try{
//...код с ошибками
}
catch(/*...*/) //Блок(и) обработки
{
}
//Просто продолжаем
Цитата Сообщение от Dark Byte Посмотреть сообщение
акже еще такая проблема, вот код, почему при не открывшемся файле
fread Си'шная функция, которая о исключениях вообще не ведает.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
23.01.2015, 21:43  [ТС] 13
Цитата Сообщение от S_el Посмотреть сообщение
Перефразирую.Почему вы решили,что функция fread бросает исключения?
но ошибка то бросается при чтении... что это если не исключение?
0
Эксперт С++
4984 / 3091 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.01.2015, 21:47 14
Dark Byte, ты делаешь то, в чём нет необходимости. Отсюда и появляются проблемы.

Добавлено через 1 минуту
Цитата Сообщение от Dark Byte Посмотреть сообщение
что это если не исключение?
Может быть, просто ошибка?
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
23.01.2015, 21:50  [ТС] 15
Цитата Сообщение от castaway Посмотреть сообщение
Может быть, просто ошибка?
я думал все ошибки это исключения... а как мне ее отловить в таком случае? ну допустим я проверю указатель на != NULL, но файл может оказаться и пустой... как мне отловить эту ошибку? чтобы не выкидывало какие то не информативные окошки, а делалось то что я пропишу
0
Неэпический
17850 / 10618 / 2049
Регистрация: 27.09.2012
Сообщений: 26,689
Записей в блоге: 1
23.01.2015, 21:54 16
Цитата Сообщение от Dark Byte Посмотреть сообщение
но файл может оказаться и пустой... как мне отловить эту ошибку?
Ознакомиться с функцией поближе, и узнать, что и в каких случаях она делает
http://www.cplusplus.com/reference/cstdio/fread/
Return Value
The total number of elements successfully read is returned.
If this number differs from the count parameter, either a reading error occurred or the end-of-file was reached while reading. In both cases, the proper indicator is set, which can be checked with ferror and feof, respectively.
If either size or count is zero, the function returns zero and both the stream state and the content pointed by ptr remain unchanged.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
23.01.2015, 21:58  [ТС] 17
Croessmah, ага, т.е. в сущности все сводится к определению и проверке размера файла... вот ведь бред, было бы все таки проще отлавливать исключение, ну почему она не бросает его тупая функция
C++
1
2
3
4
5
6
7
8
fpos_t fsize(FILE* fp)
{
    fpos_t curr = ftell(fp);
    fseek(fp, 0, SEEK_END);
    fpos_t size = ftell(fp);
    fseek(fp, curr, SEEK_SET);
    return size;
}
0
7651 / 6456 / 2944
Регистрация: 14.04.2014
Сообщений: 28,148
23.01.2015, 22:08 18
Ну так пользуйся потоками, там исключения есть.
0
Эксперт С++
4984 / 3091 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.01.2015, 22:10 19
Цитата Сообщение от Dark Byte Посмотреть сообщение
ну допустим я проверю указатель на != NULL, но файл может оказаться и пустой... как мне отловить эту ошибку?
Не важно, пустой файл или нет, fopen вернёт 0 (NULL) в случае ошибки.
Если файл пуст, то ты можешь проверить его размер после открытия.
0
2441 / 1839 / 406
Регистрация: 15.12.2013
Сообщений: 8,228
23.01.2015, 22:11 20
Цитата Сообщение от Dark Byte Посмотреть сообщение
ну почему она не бросает его тупая функция
Читайте внимательно что вам пишут:
Цитата Сообщение от Croessmah Посмотреть сообщение
fread Си'шная функция, которая о исключениях вообще не ведает.
0
23.01.2015, 22:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2015, 22:11
Помогаю со студенческими работами здесь

Обработка исключений
В задании функции должны генерировать подходящие исключения. Обработку исключений нужно выполнять...

Обработка исключений
Все функции должны реализоваться в 4-х вариантах: без спецификации исключений; со спецификацией...

Обработка исключений
класс B является производным от абстрактного класса А. Определить обработчик исключительной...

Обработка исключений
Нужно сделать ввод часов и минут с клавиатуры и сгенерировать исключения в мейне. как понимаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru