Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Знатокам BCB и C++ exceptions / 18 сообщений из 18, страница 1 из 1
15.07.2005, 16:06
    #33169035
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Нужна помощь... как вы думаете что будет результатом работы вот этого кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
try
{
        try
        {
                        throw Exception("1");

        }__finally
        {
                try {
                        throw Exception("2");
                }catch(...) {}
        }

} catch(Exception &e)
{
        ShowMessage(e.Message);
}
? Я думал что сообщение "1", но вместо этого мой BCB5 Update 1 просто зависает и начинает нещадно жрать память! Это фича borland extensions или что?
...
Рейтинг: 0 / 0
15.07.2005, 16:44
    #33169185
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Я, скорее всего, не втыкаю.... т.к. с билдером не работал никогда. Но зачем мешать С++ исключения (try catch) и структурные (__try __finally) ? Или в BCB все по-своему?
...
Рейтинг: 0 / 0
15.07.2005, 17:03
    #33169277
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
redskin

ну во-первых
C++Builder implements C++ exceptions with Win32 structured exceptions
во-вторых
По-крайней мере в BCB __try и try равнозначны для c++ кода (__try можно еще использовать в pain c)
в-третьих вот пример из документации

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
try
  {
    try
    {
      f =  1 . 0 ;
      g =  0 . 0 ;
      try
      {
        puts("Another exception:");

        e = f / g;
      }
      __except(EXCEPTION_EXECUTE_HANDLER)
      {
        puts("Caught a C-based exception.");
        throw(Exception("Hardware error: Divide by 0"));
      }
    }
    catch(const Exception& e)
    {
      printf("Caught C++ Exception: %s :\n", e.msg());
    }
  }
  __finally
  {
    puts("C++ allows __finally too!");
  }


У моего примера есть тонкость - там в finally блоке вылетает еще одно исключение, которое сразу же глушится...
...
Рейтинг: 0 / 0
15.07.2005, 20:28
    #33169592
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Не мешайте вместе __finally и catch -- они разные, один из VCL, другой из C++
Используйте тогда вместо catch __except
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
16.07.2005, 00:23
    #33169696
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Lelikk

ткните меня в документацибю, где я не прав...
...
Рейтинг: 0 / 0
16.07.2005, 13:48
    #33169861
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Lelikk

Да и еще, посмотрите на мой 2й пример, он взят из документации!
...
Рейтинг: 0 / 0
16.07.2005, 22:00
    #33170069
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Вообще-то мешать в одной функции C++ exceptions и WIN32 SEH-exeptions нельзя. Компилятор не даст это скомпилировать.
...
Рейтинг: 0 / 0
16.07.2005, 22:03
    #33170074
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Или Борланд опять впереди планеты всей и свое что-то выдумал ?
...
Рейтинг: 0 / 0
17.07.2005, 08:56
    #33170154
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
MasterZivИли Борланд опять впереди планеты всей и свое что-то выдумал ?

Это VC6 была такая отсталая, что не позвoрляла смешивать, а VC7.1 уже научился если мне память не изменяет
...
Рейтинг: 0 / 0
18.07.2005, 08:00
    #33170453
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Я тоже замечал не раз какие-то нелогичные вещи с вложенными блоками try catch __finally, потому теперь никогда так не делаю, выделяю каждый блок в функцию
...
Рейтинг: 0 / 0
18.07.2005, 10:32
    #33170670
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
MasterZiv

К чему эти абстрактные рассуждения? Я уже привел пример из документации.

Lepsik

Может вы что-нибудь подскажете?

Карабас Барабас

Это как?
...
Рейтинг: 0 / 0
18.07.2005, 10:35
    #33170676
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
более того - __try/__finally это не SEH, это просто Borlan Language Extension. А на счет SEH в докуменации сказано
C++Builder implements C++ exceptions with Win32 structured exceptions

Если учесть что все это я уже писал, то получается какая-то странная дискуссия...
...
Рейтинг: 0 / 0
18.07.2005, 10:50
    #33170720
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
finally не является Стандартом языка, поэтому за его поведение отвечает разработчик компилятора. Разводить спор на тему необходимости finally не буду, но видимо пока в Комитете по Стандарту есть Страутсруп, finally в С++ не бывать. Буду щее покажет.

Относительно SEH
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__set_se_translator.asp
...
Рейтинг: 0 / 0
18.07.2005, 11:00
    #33170752
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
funikovyuri Карабас Барабас

Это как?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void func2()
{
  try
  {


  }
  catch(...)
  {

  }
}

void func1()
{
  try
  {
    func2();
    func3();
    ...
  }
  __finally
  {

  }
}
...
Рейтинг: 0 / 0
18.07.2005, 12:37
    #33171061
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Карабас Барабас

А в чем отличие?
...
Рейтинг: 0 / 0
18.07.2005, 12:45
    #33171094
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
funikovyuri Карабас Барабас

А в чем отличие?отличие в том, что так работает как надо
особенно "радуют" глюки с возвращением значений из функций, в которых есть __finally, в итоге пришел в выводу о необходимости оформления кадого блока try...catch и try...__finally в отдельной функции
...
Рейтинг: 0 / 0
19.07.2005, 14:20
    #33173588
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
Если бы!

вот этот код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
{
try
{
        try
        {

        }__finally
        {
                try {
                        throw Exception("2");
                }catch(...) {}
        }
} catch(Exception &e)
{
        ShowMessage(e.Message);
}
}



void func1()
{
                        throw Exception("1");
}

Хоть и не приводит к зависанию, а к какому-то Internal Exception CXXXX все таки не сообветсвует желаемому поведению (а именно отображением сообщения "1")!!!
Дело в том что у меня не просто finally, а finally с исключением и его обработкой
...
Рейтинг: 0 / 0
27.07.2005, 03:05
    #33185963
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знатокам BCB и C++ exceptions
funikovyuri MasterZiv

Lepsik
Может вы что-нибудь подскажете?
Это как?

Я когда напоролся что Finaly работает криво просто перестал его использовать
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Знатокам BCB и C++ exceptions / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]