[原]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]

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值