断言,是一种快速有效的在调试期,检测并响应错误的机制,如果在每个接口的输入输出等位置, 加一些assert,可以提早发现程序中隐藏的bug,提高开发和调试效率。
静态断言:在编译期进行检测,一般用于类型大小、常量的检测,例如:
- 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);
仅断言:在调试模式下进行检测,仅在调试模式下有效,如果__tb_debug__没有被定义,这些代码都会被忽略
- tb_assert(x);
检测:在发布模式下进行检测,不管是否在调试模式,都会进行检测
- 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);
断言并检测:在调试和发布模式下同时进行检测
- 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);