一个函数只能采用一种形式的异常处理规则

// 注意,这是 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 编译器在编译该函数时,它会给此函数插入一些“代码和信息”
 (代码指的是当该函数中出现异常时的回调函数,
 而信息主要是指与异常出现相关的一些必要的链表),
 因此每份函数只能有一份这样的东东(“代码和信息”),
 故一个函数只能采用一种形式的异常处理规则。 
 朋友们!恍然大悟了吧!
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值