2012-07-25 59 views
0

AS。没关系。有错误的直觉感觉继续/重复循环。自己做傻瓜:​​-)如果继续使用“不返回值”?

请参阅评论栏目。 如果我取消注释 - 编译进行顺利。 如果我保留它的评论,则会给出有关未定义结果的警告。 看来,编译器无法解释“中断”和“继续”等伪程序。

是否与之前的Delphi版本碰撞? 是否有QC?

//returns 0 or win32 error code 
function TfmMain.callQDN(DeviceName: string; 
    out buff: string): DWORD; 
const len_step = 8192; 
var res, len, err: DWORD; 
    lpDeviceName: PChar; 
begin 
    SetLength(buff, len_step); 
    len := Length(buff); 

    lpDeviceName := nil; 
    if DeviceName>'' then lpDeviceName := @DeviceName[1]; 

    repeat 
    Res := QueryDosDevice(lpDeviceName, @buff[1], len); 

    if Res = 0 then begin 
     err := GetLastError; 
//  Result := err; 

     if err = ERROR_INSUFFICIENT_BUFFER then begin 
      len := len_step + len; 
      SetLength(buff, len); 
      continue; 
     end; 

     Result := err; 
    end else begin 
     Result := 0; 
     SetLength(buff, res); // res+1 ? 
    end; 

    until (Result = 0); 

end; 

回答

0

我很蠢。

继续重新检查条件,不仅仅是再次启动循环体

+0

该文档在这里没有帮助。它并没有使得非常清楚的是,在until之后立即评估“until”条件。在'repeat'循环中,'continue'几乎等同于'goto until'。 – 2012-07-25 11:08:33

+1

更一般地说,在任何循环中,'Continue'几乎(但不完全)等同于goto到循环体的末尾。 – hvd 2012-07-25 11:10:52