值得借鉴的 异常捕获体系 (一)

原创 2012年03月30日 14:23:14

//--------------------------------------------------------------------------------
//
// Filename   : Assert.h
//
//--------------------------------------------------------------------------------

#ifndef __ASSERT__H__
#define __ASSERT__H__

// include files
#include "BaseType.h"

extern int g_Command_Assert ;//控制参数,不提示Assert的对话框,直接忽略
extern int g_Command_IgnoreMessageBox ;//控制参数,跳过MyMessageBox的中断

//--------------------------------------------------------------------------------
//
//
//
//
//--------------------------------------------------------------------------------
VOID __assert__ (const CHAR* file, UINT line, const CHAR* func, const CHAR* expr) ;
VOID __assertex__ (const CHAR* file, UINT line, const CHAR* func, const CHAR* expr, const CHAR* msg) ;
VOID __assertspecial__ (const CHAR* file, UINT line, const CHAR* func, const CHAR* expr, const CHAR* msg) ;
VOID __messagebox__(const CHAR*msg ) ;
//--------------------------------------------------------------------------------
//
//
//
//
//--------------------------------------------------------------------------------
VOID __protocol_assert__ (const CHAR* file, UINT line, const CHAR* func, const CHAR* expr) ;

#if defined(NDEBUG)
 #define Assert(expr) ((VOID)0)
 #define AssertEx(expr,msg) ((VOID)0)
 #define AssertSpecial(expr,msg) ((VOID)0)
 #define MyMessageBox(msg) ((VOID)0)
#elif __LINUX__
 #define Assert(expr) {if(!(expr)){__assert__(__FILE__,__LINE__,__PRETTY_FUNCTION__,#expr);}}
 #define ProtocolAssert(expr) ((VOID)((expr)?0:(__protocol_assert__(__FILE__,__LINE__,__PRETTY_FUNCTION__,#expr),0)))
 #define AssertEx(expr,msg) {if(!(expr)){__assertex__(__FILE__,__LINE__,__PRETTY_FUNCTION__,#expr,msg);}}
 #define AssertSpecial(expr,msg) {if(!(expr)){__assertspecial__(__FILE__,__LINE__,__PRETTY_FUNCTION__,#expr,msg);}}
 #define AssertExPass(expr,msg) {if(!(expr)){__assertex__(__FILE__,__LINE__,__PRETTY_FUNCTION__,#expr,msg);}}
 #define MyMessageBox(msg) ((VOID)0)
#elif __WIN_CONSOLE__ || __WIN32__ || __WINDOWS__
 #define Assert(expr) ((VOID)((expr)?0:(__assert__(__FILE__,__LINE__,__FUNCTION__,#expr),0)))
 #define AssertEx(expr,msg) ((VOID)((expr)?0:(__assertex__(__FILE__,__LINE__,__FUNCTION__,#expr,msg),0)))
 #define AssertSpecial(expr,msg) ((VOID)((expr)?0:(__assertspecial__(__FILE__,__LINE__,__FUNCTION__,#expr,msg),0)))
 #define MyMessageBox(msg) __messagebox__(msg)
#elif __MFC__
 #define Assert(expr) ASSERT(expr)
 #define AssertEx(expr,msg) ((VOID)0)
 #define AssertSpecial(expr,msg) ((VOID)0)
 #define MyMessageBox(msg) ((VOID)0)
#endif

#endif

相关文章推荐

java异常体系以及异常的捕获和处理和图解详解

java 异常是程序运行过程中出现的错误。Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中定义了许多异常类,分为两大类,错误...

异常体系结构

  • 2013年05月23日 21:59
  • 49KB
  • 下载

PowerPC体系基于vxWorks的异常堆栈切换

1. 简介 本文简要介绍了PowerPC体系结构下vxWorks操作系统的异常处理机制,指出当前机制存在的缺陷,即:中断级的异常处理在任务上下文中执行,异常处理堆栈基址依赖于当前任务的栈帧指针,如果...

java异常体系理解

  • 2014年04月29日 17:39
  • 25KB
  • 下载

java异常体系结构详解

前几天在参加网易和360公司的在线考试的时候,都出了一道关于java中异常类的多项选择题。这几天翻看了相关书籍和网上一些资料,结合自己的理解与思考,将自己的一些收获记录如下: 先来看看java中异常的...
  • htq__
  • htq__
  • 2016年03月31日 11:41
  • 1036

异常处理体系结构

在裸板程序中,中断的head.S如下:
  • ychongx
  • ychongx
  • 2014年06月03日 22:47
  • 363

黑马程序员_异常体系

什么事是常: 异常:就是不正常。程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个...

黑马程序员——Java基础——异常体系

点击打开链接 点击打开链接 点击打开链接 android培训、点击打开链接 点击打开链接 java培训、期待与您交流!">点击打开链接 点击打开链接...

java异常体系结构

异常是指程序运行时出现的错误,java语言的异常处理框架是java语言健壮性的一个重要体现。 java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。 在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:值得借鉴的 异常捕获体系 (一)
举报原因:
原因补充:

(最多只允许输入30个字)