Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не понял в чем грабли - warning C4530  (Прочитано 12665 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Pu
Большой босс

ru
Offline Offline
78


« : 17-09-2003 10:07 » 

Вопрос следующий - у меня прикомпиляции одного проекта постоянно выходит один ворнинг -

warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify -GX

мне не совсем понятно чем это мне может граблить, тк он указывает в коды АТЛ. Может кто в курсе чем это может грозить. И де я потенциально рискую наступить на них(грабли).
да еще там дописано следующее

while compiling class-template member function 'void __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Copy(unsigned int)

Среда(VC6 & ATL)
у меня в принципе есь свои соображения но я не совсем готов их сформулировать. :oops:
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 17-09-2003 10:24 » 

Вот что написано в MSDN
an object with automatic storage in the frame, between the function doing the throw and the function catching the throw, will not be destroyed. However, an object with automatic storage created in a try or catch block will be destroyed.

По простому говоря для некоторых объектов не будет вызван деструктор при раскрутке стека.
Записан
NetRaider
Гость
« Ответ #2 : 17-09-2003 10:44 » 

Это скорее всего связано с настройками проекта...
Для отключения(если warning'и глаза мозолят) сделай так:
Код:
#pragma warning( push )
#pragma warning( disable: 4530 )
#include файл(ы) в которых warning'и сидят
#pragma warning( pop )
« Последнее редактирование: 19-11-2007 19:54 от Алексей1153++ » Записан
NetRaider
Гость
« Ответ #3 : 17-09-2003 10:55 » 

Чето я поторопился с #pragma warning:
Поставь галочку "Enable Exception handling" в настройках проекта
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #4 : 17-09-2003 12:01 » 

а я почемуто подумал что у меня гдето вызывается деструктор для автоматических объектов- но вроде такой чушью никогда не страдал.
А сейчас активно пользую типы автоматизации , думал что в них напортачил
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 17-09-2003 12:02 » 

А ты /GX  включать пробовал? - "Specify -GX "
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Pu
Большой босс

ru
Offline Offline
78


« Ответ #6 : 17-09-2003 12:08 » 

Дело в том что я пробовал включать и все нормально - но я пока НЕ ПОНЯЛ что это дает что эта опция делает - а ет я не люблю - делать то что не понимаю.
Вот и пробую сейчас вникнуть.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
NetRaider
Гость
« Ответ #7 : 17-09-2003 22:09 » 

Цитата
Вот и пробую сейчас вникнуть.
И это правильно Улыбаюсь

Без галки "Enable Exception handling" (/GX ) в процессе stack unwinding при возникновении C++ исключения, не будут уничтожены автоматические объекты.
И пример:
Код:
struct A
{
    ~A() | std::cout << "~A()\n"; }
};

void func()
{
    throw 0;
}

void func2()
{
    A a;
    func(); // тут функция func() выкинет исключение и объект 'а' не будет уничтожен, т. е. не произойдет вызова ~A()
}

int main()
{
    try
    {
        func2();
    }

    catch(int){}
    return 0;
}
Установка опции GX заставляет компилятор вызывать деструкторы автоматических объектов при раскрутке стека.
« Последнее редактирование: 19-11-2007 19:56 от Алексей1153++ » Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #8 : 18-09-2003 05:11 » new

2NetRaider Ну вот спасибо ! Все вроде стало на свои места.  Улыбаюсь
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines