Skip to content

断言与检测

ruki edited this page Dec 21, 2015 · 2 revisions

断言,是一种快速有效的在调试期,检测并响应错误的机制,如果在每个接口的输入输出等位置, 加一些assert,可以提早发现程序中隐藏的bug,提高开发和调试效率。

  1. 静态断言:在编译期进行检测,一般用于类型大小、常量的检测,例如:

    tb_assert_static(sizeof(tb_byte_t) == 1);
    tb_assert_static(sizeof(tb_uint_t) == 4);
    tb_assert_static(sizeof(tb_uint8_t) == 1);
    tb_assert_static(sizeof(tb_uint16_t) == 2);
    tb_assert_static(sizeof(tb_uint32_t) == 4);
    tb_assert_static(sizeof(tb_hize_t) == 8);
  2. 仅断言:在调试模式下进行检测,仅在调试模式下有效,如果__tb_debug__没有被定义,这些代码都会被忽略

    tb_assert(x);
  3. 检测:在发布模式下进行检测,不管是否在调试模式,都会进行检测

    tb_check_return(x);
    tb_check_return_val(x, v);
    tb_check_goto(x, b);
    tb_check_break(x);
    tb_check_abort(x);
    tb_check_continue(x);
  4. 断言并检测:在调试和发布模式下同时进行检测

    tb_assert_and_check_abort(x);
    tb_assert_and_check_return(x);
    tb_assert_and_check_return_val(x, v);
    tb_assert_and_check_goto(x, b);
    tb_assert_and_check_break(x);
    tb_assert_and_check_continue(x);

Clone this wiki locally