Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
vetal20600
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
1

__try __except не работает

14.11.2012, 23:59. Просмотров 3527. Ответов 10
Метки нет (Все метки)

Подскажите, пожалуйста, почему это не работает и как ловить другие исключения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// l4.cpp : Defines the entry point for the console application.
//
 
#include <windows.h>
#include <stdio.h>
 
int main (int argc, LPCSTR argv []) {
    float a=0,y=3,b;
    __try {
        b=y/a;
 
    } 
    __except (EXCEPTION_FLT_DIVIDE_BY_ZERO)  {
        printf("Dilennia na 0!\n");
    }
    system("pause");
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2012, 23:59
Ответы с готовыми решениями:

Приложение работает в Debug, странно работает в Release и не работает при билде
Действия выполняются на эмуляторе Pixel 2. Android 9.0. Если я запускаю приложение с конфигурацией...


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

Или воспользуйтесь поиском по форуму:
10
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
15.11.2012, 00:16 2
м.б. такая штука как у тебя и может работать, но я такого не встречал. Ловля исключений в С++ делается так:
C++
1
2
3
4
5
6
7
8
9
try {
// тут код, имеющий привычку сыпать исключения
} catch (EXCEPTION_FLT_DIVIDE_BY_ZERO)
{
// тут обработали деление на ноль
} catch (...)
{
// тут обработали всё остальные исключения
}
0
vetal20600
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
15.11.2012, 00:37  [ТС] 3
John Prick, на c++ microsoft visual c++ 2008 express такое должно рабоать...
Но не работает((
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
15.11.2012, 00:51 4
vetal20600, а зачем именно так писать? в чём выгода по сравнению с обычным try catch?
0
15.11.2012, 00:51
vetal20600
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
15.11.2012, 00:52  [ТС] 5
Цитата Сообщение от John Prick Посмотреть сообщение
vetal20600, а зачем именно так писать? в чём выгода по сравнению с обычным try catch?
Потому что от меня требуют так сделать))
0
Croessmah
++Ͻ
15816 / 8951 / 1719
Регистрация: 27.09.2012
Сообщений: 21,994
Записей в блоге: 2
Завершенные тесты: 2
15.11.2012, 01:46 6
ОБРАБОТКА ИСКЛЮЧЕНИЙ В VISUAL C++
2
Kastaneda
Jesus loves me
Эксперт С++
5052 / 3070 / 351
Регистрация: 12.12.2009
Сообщений: 7,767
Записей в блоге: 2
Завершенные тесты: 1
15.11.2012, 09:52 7
Цитата Сообщение от John Prick Посмотреть сообщение
м.б. такая штука как у тебя и может работать, но я такого не встречал. Ловля исключений в С++ делается так:
Цитата Сообщение от John Prick Посмотреть сообщение
а зачем именно так писать? в чём выгода по сравнению с обычным try catch?
Нет, не ошибка. Да, в С++ такого нет, это называется SEH (Structured Exception Handling). Под виндой можно делать так
C++
1
2
3
4
5
6
7
8
     _try
     {
         // some code 
     }
     _except( EXCEPTION_EXECUTE_HANDLER )
     {
         printf( " Caught the exception\n" );
     }
vetal20600, похоже ты просто что-то не так собрал, код рабочий.
1
Croessmah
++Ͻ
15816 / 8951 / 1719
Регистрация: 27.09.2012
Сообщений: 21,994
Записей в блоге: 2
Завершенные тесты: 2
16.11.2012, 13:39 8
Цитата Сообщение от Kastaneda Посмотреть сообщение
vetal20600, похоже ты просто что-то не так собрал, код рабочий.
Попробовал ради интереса на 12-ой студии. Так то все нормально, но значение, возвращаемое функцией
C++
1
GetExeptionCode()
не совпадает со значением
C++
1
EXCEPTION_FLT_DIVIDE_BY_ZERO
0
vetal20600
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
16.11.2012, 14:09  [ТС] 9
Всем спасибо.
Уже сам разобрался, что было не так...
0
silent_1991
Эксперт С++
5025 / 3085 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
Завершенные тесты: 1
21.11.2012, 13:49 10
Цитата Сообщение от vetal20600 Посмотреть сообщение
Уже сам разобрался, что было не так...
Разобрались - поведайте об этом. Решение проблемы может быть интересно другим пользователям форума.
1
vetal20600
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
29.11.2012, 21:51  [ТС] 11
Надо было сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// l4.cpp : Defines the entry point for the console application.
//
 
#include <windows.h>
#include <stdio.h>
 
int main (int argc, LPCSTR argv []) {
    dword pmm;
    int a=0,y=3,b;
    __try {
        b=y/a;
 
    } 
    __except (exception_execute_handler)  {
    pmm=GetExceptionCode();
    if (pmm==EXCEPTION_INT_DIVIDE_BY_ZERO) {
            printf("Divide by 0!!!\n");
        }
        
    }
    system("pause");
    return 0;
}
3
29.11.2012, 21:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.