Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2009, 16:03   #1
TimeChip
Пользователь
 
Регистрация: 21.01.2009
Сообщений: 17
По умолчанию Функция проверки переполнения в Delphi

Здравствуйте, товарищи программеры!
Стоит такой вопрос, существует ли в Delphi функция проверки переполнения (например для формата integer). Наподобие функция IOResult (Input-Output Result), которая возвращает 0, если ошибок не возникло.
{$I-}....{$I+}- IOResult

Если такая функция пропишите пожалуйста код ее исполнения!

Заранее благодарен, TimeChip!
TimeChip вне форума Ответить с цитированием
Старый 31.01.2009, 16:07   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Код:
try
....
....исполняем какие-нибудь действия
....
except
... в случае любой ошибки при исполнении действий
end;
можно немного развить условие :
Код:
try
  try
  ...
  ...исполняем какие-то действия
  ...
  finally 
  ...если все действия верные - еще что-нить делаем 
  end;
except
...
...в случае любой ошибки при исполнении действий
...
end;
и в секции except можно обработать (спокойно без вылета..) код произошедшей ошибки ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 31.01.2009 в 16:11.
Kotofff вне форума Ответить с цитированием
Старый 31.01.2009, 16:17   #3
TimeChip
Пользователь
 
Регистрация: 21.01.2009
Сообщений: 17
По умолчанию

Спасибо, но мне нужна функция, которая бы возвращала значения, именно если произошел факт переполнения!
Если есть конечно, а так щас попробую try....except
TimeChip вне форума Ответить с цитированием
Старый 31.01.2009, 16:21   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

вот тут все ооочень подробно : http://www.rsdn.ru/article/Delphi/Delphi_7_04.xml
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 31.01.2009, 16:26   #5
TEHb
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 32
По умолчанию

Тип Integer имеет диапозон от -2 147 483 648 до 2 147 483 647.

При переполнении типа происходит сбрасывание до начального значени и работа с ним как с начальным + n (n - число переполнения) тоесть по кругу.

Последний раз редактировалось TEHb; 31.01.2009 в 16:29.
TEHb вне форума Ответить с цитированием
Старый 31.01.2009, 16:29   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
Тип Integer имеет диапозон от -2 147 483 648 до 2 147 483 647.

При переполнении типа происходит сбрасывание до начального значени и работа с ним как и конечным + n (n - число переполнения) тоесть по кругу.
Это если {$Q-}
если же {$Q+} то будет ошибка...
_Dmitry вне форума Ответить с цитированием
Старый 31.01.2009, 16:34   #7
TEHb
Пользователь
 
Регистрация: 28.01.2009
Сообщений: 32
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
если же {$Q+}
тогда Integer в String переводить надо, но неудобно дальше расчитывать что-то. а если это простой сётчик событий типа:

for i := 2147483600 to 2147483700 do
label1.Caption:=intTostr(i);
или что-то подобное то проблем не должно быть.
TEHb вне форума Ответить с цитированием
Старый 31.01.2009, 16:35   #8
TimeChip
Пользователь
 
Регистрация: 21.01.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от TEHb Посмотреть сообщение
Тип Integer имеет диапозон от -2 147 483 648 до 2 147 483 647.

При переполнении типа происходит сбрасывание до начального значени и работа с ним как с начальным + n (n - число переполнения) тоесть по кругу.
Это все конечно понятно, что при переполнении переменная: Integer просто обнолюется или возвращает ноль, так вот если стоит контроль переполнения, то выводится ошибка <Integer owerflow> и программа стопорится, так вот мне необходимо функция, которая во избежании появления этой ошибка проверяла бы значения и возвращала бы число, после этого прогу можно заветлить, что прога не стопорилась из-за СИСТЕМНОГО СООБЩЕНИЯ ОБ ОШИБКЕ!

Все же кто знает отпишитесь плиз!
try... except все равно не помогает, выводит сисСообщение, о переполнении! Вот.
TimeChip вне форума Ответить с цитированием
Старый 31.01.2009, 16:39   #9
TimeChip
Пользователь
 
Регистрация: 21.01.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
Это если {$Q-}
если же {$Q+} то будет ошибка...
Это вообще с чем едят!?
Что она возвращает и какая функция за это отвечает?
TimeChip вне форума Ответить с цитированием
Старый 31.01.2009, 16:40   #10
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

в секции except
Код:
except
  on E.EIntOverflow do 
    begin     
     .....
     .....    { обработка ошибки переполнения };
     .....    { делайте что-нить }
    end;
end;
а вообще-то ошибка вылетает при запущенном Delphi ? в процессе запуска ?
просто компилятор даже при всяких там try...except все равно перехватывает сам все ошибки ...
запусти прогу без компилятора ... просто exe-шник ...тогда наша обработка вступит в силу
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 31.01.2009 в 16:43.
Kotofff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос проверки ошибок Iskin Microsoft Office Excel 7 09.12.2008 14:00
Ошибка переполнения стека Cannibal Общие вопросы Delphi 1 01.12.2008 21:32
Ошибка переполнения стека из-за использования рекурсий Morrigan13 Помощь студентам 5 02.04.2008 08:04
Система проверки на человека Andrey1433 PHP 2 11.03.2008 14:13
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50