assert和static_assert及#error的使用

一、程序的错误控制

在实际的开发中,往往会遇到一些基础的控制,比如是否数组越界,或者类型不匹配等。一般可以使用if语句来控制,但在一些重要的场景上使用assert或者其它一些自定义的宏(verify等 )。随着C++标准的不断推进,在新标准里又提供了在编译期进行判断的关键字static_assert。
有人可能会说,可以用异常来处理控制这些问题,但实际上,C/C++原则上是不推荐使用异常来处理问题的,除了其本身语言无法提供更多的堆栈信息等外,更重要的是,在C++程序中,一般到了这种地步,程序要么直接崩溃了(内存异常);要么,程序再跑已经没有任何意义。可能在某些特定场合下,程序捕获异常是有意义的,这就需要开发者自己处理了。

二、运行期控制

在运行期进行错误控制一般使用assert,基本的示例如下:

#include <assert.h>
#include <iostream>
#include <string>

#define SHOW_KLEN = 1
constexpr int KLEN = 100;
int buf[KLEN] = {
   0};

void testAssert(int id) {
   
  assert(id < KLEN);
  std::cout << "id value:" << id << std::endl;
}

int main() 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值