flag:=''
try
  flag:='B';
  exit;
finally
  flag:='C'  //不是总被执行吗?
endshowmessage(flag); //flag的值都是B跟踪后发现flag:='C'不会被执行
运行环境为dephi2007

解决方案 »

  1.   

    exit;是不会执行下面的东东的
      

  2.   

    try..finally..end 是错误处理语句。出不出错都会执行下面语句。
      

  3.   

    把 exit; 这句去掉就可以了
      

  4.   

    flag在后面是否有再用,如果没有用,则可能是编译优化掉了。
      

  5.   

    应该是优化掉了,我记得EXIT会进入FINALLY和EXCEPT的。你换成这个代码就知道了  try
        ShowMessage('1');
        Exit;
      finally
        ShowMessage('2');
      end;
      

  6.   


    var
        flag: string;
    begin
        try
            flag := 'a';
            exit;
        finally
            flag := 'b';
            ShowMessage(flag);
        end;
    end;
     你的代码是这样的吗?为什么我测试是显示“b”呢我的d7+xp
      

  7.   

    F8的跟踪是跟踪不到,F7可以看到,finally中语句是会执行的,即便try中有exit
      

  8.   

    delphi2006 中Finally里的语句肯定执行,即使Try中有Exit
      

  9.   

    是的,我的同notebook800一样。就是b
      

  10.   

    flag被优化了,不会被执行,因为没有地方用到
      

  11.   

    flag优化了,没有执行,结果是‘b’
      

  12.   

    TRY
     
    FINALLYEND;
      最后一定要执行finally中的语句,没执行是优化了如果你这样
    try
      xFrom = TForm.Create(nil);
    finally
      xFrom.Free;
    end;
      肯定会被free
      

  13.   

    函数内部数据 最后是写且不是取某函数的返回值 将被和谐...procedure TForm1.FormCreate(Sender: TObject);
    var
      lVar:Integer;
    begin
      lVar := 0;     //不和谐 后面有读
      Caption := IntToStr(lVar); //读
      lVar := StrToInt('1');//不和谐
      lVar := 1+2;  //和谐
    end;取函数返回值不会和谐是因为 不知道函数做了什么 也许执行它会设置个全局标记 这样就有存在的意义了
    实际上 StrToInt 是不会动全局数据的 可编译器没去分析 也没必要分析 直接不和谐就好了 
    String 是个例外 procedure TForm1.FormCreate(Sender: TObject);
    var
      lVar:string;
    begin
      lVar := '很好很和谐'; //写 不和谐
      Caption := lVar;      //因为这有读
      lVar := IntToStr(ParamCount);//不和谐 函数调用不知道函数做了啥
      lVar := '';//还是不和谐 原因请自己 查string 什么东西
    end;
      

  14.   

    finally会执行的
    优化好像有时是会出问题的
      

  15.   

    showmessage(flag); //flag的值都是B
    写到另一个Button里。
    我得到的是 C (D2007)