[原]C断言/静态断言

关于断言,可以作为一种很强大的调试方式或者程序运行时的错误诊断

但是断言也不是适合于各种地方,服务器软件和嵌入式程序一般不适用,断言会强制中断正在运行的程序,对于服务器等程序来说,

将会是一个灾难。加上,断言会加剧CPU 的负载,其中会调用一些函数。

作为调试时使用断言是个不错的选择

一般断言:

#ifndef NDEBUG

          assert( conditon ) ;

#endif

这样,你的断言会在没有定义NDEBUG 的时候检测是否assert(..)中的表达式为真,如果不为真,将终止程序

但是,作为一种调试方式,assert()一般不用于判断用户的输入,而是断言程序在某个时刻的状态一定为真,当然,终止程序的方法有点粗鲁,但是比起让错误的程序继续执行更加有效

下面是静态断言

为什么使用静态断言?

静态断言可以在编译时就对程序的错误做出判断,而普通断言只能在程序运行出现错误的时候做出退出并产生调试信息

static_assert(condition,string_condition);

第一次参数是表达式,第二个参数是输出的信息

static_assert()是C++ 新增的内容

在C语言里可以这样实现:

#define JOIN( X , Y ) JOIN_AGIN( X, Y )

#define JOIN_AGIN(X,Y) X##Y

typedef static_assert(e)\

          typedef char JOIN(assert_failed_at_line,__LINE___) [(e)?1:-1]

  

posted @ 2012-04-17 20:43  _Boz  阅读(2567)  评论(0编辑  收藏  举报
4AI?Z:cp1z?_RJQle1]Gs;P!T)RHroW|