而不能两个都跟,就像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 '{'
...
}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 '{'
解决方案 »
- 不能将参数 2 从“LPSTR”转换为“LPTSTR”
- CoGetObject总是失败,怎么办?
- SDI中如何使用CTabCtrl?
- 目前你在CSDN社区有可用分:10040, 总信誉分是:100, 总专家分是:3000
- 在对话框里,在richedit输入汉字保存后,打开是乱码,请问如何解决,谢谢!
- 想显示个钟表怎么办?!
- 我想在按扭的响应函数中画出按扭的边框,在别的按扭响应中再把边框取消,应该怎么做?
- 如何调用系统音频属性调节和音量调节?
- 求教:为什么CListCtrl在一般视图类创建会出错?程序是这样在里面,谢谢
- 关于数据结构的问题
- 求msdn用法!
- CFileDialog和fstream有冲突吗?xp下的怪问题
但是有区别。finally会执行,except不一定会执行。
__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"展开,是不是这个意思?
windows核心编程的异常处理一章上有很详细的解释。推荐你去看看