为什么出现"Return value of function 'XXXXXXX' might be undefined"的错误! (50分)

  • 主题发起人 主题发起人 Vinson
  • 开始时间 开始时间
V

Vinson

Unregistered / Unconfirmed
GUEST, unregistred user!
就是此函数!!![:(][:(!]
Function FindDNFlg(DataName:String):Boolean;
var
; i:Integer;
begin
; i:=1;
; While i<=Length(DataName) do begin
; ; if Copy(DataName,i,1)='-' then begin
; ; ; Result:=True;
; ; ; Break;
; ; end
; ; else
; ; ; Result:=False;
; ; i:=i+1;
; end;
end;
 
不能吧, 同样的代码在D6中就没问题
 
首先要明确的是:那只是一个警告,不是错误!
 
正常的
编译器认为你的代码
可能函数没有返回值

if Length(DataName)=0 then
; ; no return value
[:)]
 
也就是说你这个FindDNFlg有问题,可能返回值(i>Length(DataName)时)没有赋值
所以编译器就会发出这个警告。
 
如下,因为编译器认为你没有初始化返回值,它觉得你的循环里的代码可能执行不到,这样你的函数的返回值就不确定了,OK?
Function FindDNFlg(DataName:String):Boolean;
var
; i:Integer;
begin
; i:=1;
;[red] result:=false;[/red] ;While i<=Length(DataName) do begin
; ; if Copy(DataName,i,1)='-' then begin
; ; ; Result:=True;
; ; ; Break;
; ; end
; ; else
; ; ; Result:=False;
; ; i:=i+1;
; end;
end;
 
是因为没有给Result付初值,你这样写就行了:
Function FindDNFlg(DataName:String):Boolean;
var
; i:Integer;
begin
; [red]Result:=False;[/red]
; i:=1;
; While i<=Length(DataName) do begin
; ; if Copy(DataName,i,1)='-' then begin
; ; ; Result:=True;
; ; ; Break;
; ; end
; ; else
; ; ; Result:=False;
; ; i:=i+1;
; end;
end;

下面这样写更简单快捷:
Function FindDNFlg(DataName:String):Boolean;
var
; i:Integer;
begin
; Result:=False;
; for i:=1 to Length(DataName) do
; begin
; ; if Copy(DataName,i,1)='-' then
; ; begin
; ; ; Result:=True;
; ; ; Break;
; ; end;
; end;
end;
 
刚才试了一下
默认返回true(D5)
 
如果DataName='',因result的赋值都在while循环中,故函数无返回值,这就是导致错误信息的原因,
可改为这样:
Function FindDNFlg(DataName:String):Boolean;
var
; i:Integer;
begin
; Result:=False;
; i:=1;
; While i<=Length(DataName) do
; ; if Copy(DataName,i,1)='-' then
; ; begin
; ; ; Result:=True;
; ; ; Break;
; ; end
; ; else
; ; ; i:=i+1;
end;
 
[:(]来迟了,不过你可以不必理会这个警告。[^]
 
>>你可以不必理会这个警告
; 非也!代码在编译过程中出现警告虽然并不能阻止你编译成功,但说明你的程序中肯定有这样或那样
考虑不周的地方,应该养成一个良好的习惯——如果有警告,马上找到它的根源,然后修正之。
; 我的习惯是,在函数的 Begin 之后立即给 Result 赋值——函数失败时的缺省值。
; 质量第一,速度第二!
 
creation-zy说得没错
警告是一定要去掉的,否则你的代码就有潜在的错误。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
582
import
I
I
回复
0
查看
543
import
I
I
回复
0
查看
640
import
I
后退
顶部