C语言断言笔记

1、简介:

  断言(assertion)是 C 语言中常用的防御式编程方式,减少编程错误。

2、使用场景:

  最常用的是在函数开始的地方,检测所有参数。有时候也可以在调用函数后,检查上下文是否正确。

3、编译:

  C 语言的标准库含有 assert() 这个宏(需 #include ),提供断言功能。

  当程序以 release 配置编译时(定义了 NDEBUG 宏),assert() 不会做检测;

  而当在 debug 配置时(没定义 NDEBUG 宏),则会在运行时检测 assert(cond) 中的条件是否为真(非 0),断言失败会直接令程序崩溃。

4、副作用的断言:

  初学者可能会把有副作用的代码放在 assert() 中:

    assert(x++ == 0); /* 这是错误的! */  

  因为这样会导致 debug 和 release 版的行为不一样。

5、何时使用断言:

  初学者可能会难于分辨何时使用断言,何时处理运行时错误(如返回错误值或在 C++ 中抛出异常)。

  简单的答案是,如果那个错误是由于程序员错误编码所造成的(例如传入不合法的参数),那么应用断言;

  如果那个错误是程序员无法避免,而是由运行时的环境所造成的,就要处理运行时错误(例如开启文件失败)。

 

posted @ 2021-02-07 16:18  Yu_tiann  阅读(732)  评论(0编辑  收藏  举报