这是delphi7的bug吗?还是我 的水平不行,看不懂?(0分)

  • 主题发起人 主题发起人 153141271
  • 开始时间 开始时间
1

153141271

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
begin
test;
end;

function TForm1.test;
var
ischanged : boolean;
begin
ischanged := false;
if ischanged then //这没问题
begin
Result := false;
exit;
end;

if ischanged then //这有问题 ischanged=false 居然还能进入
begin
Result := false;
exit; //直接跑到这里了 而且resutl居然返回true
end;
end;
大家跟踪一下.不晓得为什么!!
 
怎么没人 顶一下啊!!!!
自己顶
 
我认为应该这样定义test函数
function TForm1.test:boolean;
这样才会有返回值的.
否则result的结果就是随机的.
 
测试结果:没问题!
楼主你的代码没贴错吧?
 
还是不行撒!!问题 是一样的!!
test函数声明是这样的
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function test:boolean;
end;
我是d7的!!!!不会贴错的!!!!难道是我d7 本省的问题????????
 
function 在定义时必须定义返回值类型啊!会报错的 function needs result type!
刚才没注意函数的类型!楼主的代码这样写都不能运行啊!
 
真的出现楼主的情况了,代码如下:
type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
function test:Boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.test;
var
ischanged : boolean;
begin
ischanged := false;
if ischanged then //这没问题
begin
Result := false;
exit;
end;

if ischanged then //这有问题 ischanged=false 居然还能进入
begin
Result := false;
exit; //直接跑到这里了 而且resutl居然返回true
end;
end;


procedure TForm1.btn1Click(Sender: TObject);
begin
if Test then
Caption:='True';
end;
 
真的耶。楼下继续![?]
 
哦。找到问题了。呵呵!
Delphi里面的function:boolean;函数的默认返回结果为True;
如果函数的实现部分没有对Result赋值的话,函数就按默认的返回true值。
实际上楼主的函数实现部分没有对Result赋值,各位再认真看看就知道了。
 
Delphi在编译时会提示
[Warning] Unit1.pas(47): Return value of function 'TForm1.test' might be undefined
楼主没有看到吗?呵呵。
 
有什么奇怪?
function TForm1.test;中 Result 根本没有赋值。
与这个
function TForm1.test;
begin
end;
没什么区别。

真不明白这么多人喜欢讨论未定义值的返回值。
 
不是返回值奇怪,而是进入了begin中奇怪:
if ischanged then
begin
Result := false;
exit; //这里
end;
end;
 
是啊 ,第一个if没有进入 begin
而第二个if 跟踪ischanged明明为false 却进入了begin
 
可能是delphi优化编译时,最后退出过程的end和上一句的exit地址相同了。
而不是能够进入if 代码段
如果在exit和end直接加入任何其他的有效语句都会使调试跟踪正常。
比如
....
if ischanged then //这有问题 ischanged=false 居然还能进入
begin
exit;
Result := false;
exit; //直接跑到这里了 而且resutl居然返回true
end;
Caption:=''; //添加一句
end;
 
delphi哪里那么多什么bug?怪道人家都说中国的delphi的程序员是半吊子水平。
 
delphi优化编译时,最后退出过程的end和上一句的exit地址相同了。
而不是能够进入if 代码段
如果在exit和end直接加入任何其他的有效语句都会使调试跟踪正常

小神通 确实是这样
 

Similar threads

I
回复
0
查看
622
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部