而不能两个都跟,就像java/.net的try那样:try{
...
}catch{
...
}finally{
...
}
我尝试了一下MSDN当中关于__try的例子,发现__try如果同时跟了__except和__finally就有错,源代码:#include<windows.h>
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
    puts("hello");
    __try{
       puts("in try");
       __try{
          puts("in try");
          int i=1;
          i/=0;
       }__except( puts("iner filter"), EXCEPTION_EXECUTE_HANDLER ){
           puts("iner except");
       }__finally{
          puts("in finally");
       }
    }__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){
       puts("in except");
    }
    puts("world");
    return 0;
}
编译错误:
1>d:\mytest\testpod.cpp(18) : error C3274: __finally without matching try
1>d:\mytest\testpod.cpp(18) : error C2143: syntax error : missing ';' before '{'

解决方案 »

  1.   

    只能跟一个。
    但是有区别。finally会执行,except不一定会执行。
      

  2.   

    谢谢,一个疑问是,这个MSDN上面的代码:puts("hello");
    __try{
       puts("in try");
       __try{
          puts("in try");
          RAISE_AN_EXCEPTION();
       }__finally{
          puts("in finally");
       }
    }__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){
       puts("in except");
    }
    puts("world");
    当except语句发生的时候,它是不是会导致他其中嵌套的所有没有执行完的__try块,把__finally执行完?
    我不肯定MSDN说的"unwinding"展开,是不是这个意思?
      

  3.   

    是的。
    windows核心编程的异常处理一章上有很详细的解释。推荐你去看看