2012-07-25 56 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