Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

эксепшены в D7   Найти похожие ветки 

 
anonymous   (2003-09-23 17:08) [0]

Вы конечно будете смеятся, но почему в D7 деление на ноль не вызывает ошибки, и в результате не работает следующий код :

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure handlezerodivide ;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s, l : integer ;
r: real ;
begin
s:=4;
l:=0;
try
r:=s/l;
except
on EZeroDivide do handlezerodivide ;
end;
end;

procedure TForm1.handlezerodivide;
begin
Button1.caption:="warning: zero divide";
end;

end.


 
pasha_golub ©   (2003-09-23 17:11) [1]

Потому как теперь это ошибкой не считается, а считается машинной бесконечностью. В хелпе есть


 
anonymous   (2003-09-23 17:22) [2]

???
Не нашел...
А зачем тады писать :

EZeroDivide is the exception class for floating-point divide-by-zero errors... и т.д. и т.п.
(Delphi help)
?


 
icWasya ©   (2003-09-23 17:28) [3]

при включеной оптимизации этот код вообще не исполняется
напиши так

procedure TForm1.Button2Click(Sender: TObject);

var s, l : integer ;
r: single ;
begin
s:=4;
l:=0;
try
r:=s/l;
Button1.caption:=FloatToStr(r);
except
on EZeroDivide do handlezerodivide ;
end;

end;

и всё сломается!!


 
VMcL ©   (2003-09-23 17:29) [4]

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


 
pasha_golub ©   (2003-09-23 18:12) [5]

Точно, про это совершенно забыл.
ЗЫ Посыпаю голову пеплом


 
Nikolay M. ©   (2003-09-23 18:15) [6]

Был тут один, десять постов мне доказывал, что подобный код должен исполняться, потому что у него галочка оптимизации в опциях снята :) Каждый остался при своем мнении...


 
willys ©   (2003-09-23 18:24) [7]

при снятой галочке оптимизации подобный код выполняется... специально не поленился проверить:

program Project1;

var
A, B, C: Double;
begin
A := 4;
B := 0;
C := A / B;
end.

получается Runtime error 200. (Delphi 5).


 
oomneeq ©   (2003-09-23 20:04) [8]

>Nikolay M. © (23.09.03 18:15) [6]
>Был тут один,

А я и сейчас тут. :=)
Ты тогда нервничал сильно, переживал что приходится очевидности втолковывать, не удосужившись запустить код,
базируясь лишь на приобретенных тобой знаниях и считая, что понял о чем речь, увидев знакомую букву.
Милый вы наш премудрый теоретик.
Все у тебя будет хорошо, не переживай.
Желаю тебе крепкого здоровья.



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
6-18515
ilka
2003-08-07 19:06
2003.10.06
опять ClientSocket


14-18565
Юрий Зотов
2003-07-06 13:32
2003.10.06
---|Ветка была без названия|---


3-18230
MonsterKot
2003-09-16 07:47
2003.10.06
Такая вот загадка про DBGRID


6-18495
Vinnety
2003-08-09 17:14
2003.10.06
Массив записей через сокет


3-18222
IGORYOK
2003-09-15 20:58
2003.10.06
Мною найден ещё один глюк ADO