// 注意,这是 C++ 程序,文件名为: SEH-test.cpp
#include "stdio.h"
void main()
{
int* p = 0x00000000; // pointer to NULL
// 这里是 SEH 的异常处理语法
__try
{
puts("in try");
// 这里是 C++ 的异常处理语法
try
{
puts("in try");
// causes an access violation exception;
// 导致一个存储异常
*p = 13;
// 呵呵,注意这条语句
puts(" 这里不会被执行到 ");
}
catch(...)
{
puts("catch anything");
}
// 呵呵,注意这条语句
puts(" 这里也不会被执行到 ");
}
__except(puts("in filter 1"), 1)
{
puts("in except 1");
}
}
/*
VC 就是会报出一个编译错误(“ error C2713: Only one form of exception handling permitted per function ”)。
那么原因何在呢?主人公阿愚在此一定“知无不言,言无不尽”,这是因为:
VC 实现的异常处理机制,不管是 try-except 模型,还是 try-catch 模型,
它们都是以函数作为一个最基本“分析和控制”的目标,也即,
如果一个函数内使用了异常处理机制,
VC 编译器在编译该函数时,它会给此函数插入一些“代码和信息”
(代码指的是当该函数中出现异常时的回调函数,
而信息主要是指与异常出现相关的一些必要的链表),
因此每份函数只能有一份这样的东东(“代码和信息”),
故一个函数只能采用一种形式的异常处理规则。
朋友们!恍然大悟了吧!
*/
一个函数只能采用一种形式的异常处理规则
最新推荐文章于 2023-02-26 08:00:00 发布