如果程序又出现问题,可以移除这条#define指令(或把它注释掉),然后重新编译程序,这样就可以重新启用了assert()语句。 (2)例子二:STM32库函数 我们来看我们比较熟悉的GPIO初始化函数: 可见,该函数的实现中,有三条assert_param()这样的语句,其作用就是对一些函数入口参数进行一些有效性检查。其实assert_param()这就类似与我们C
assert的重新启用 如果程序又出现问题,可以移除这条 #define NDBUG 指令(或者把它注释掉),再次编译,这样就重新启用了 assert() 语句。 三、注意事项 3.1 运行效率问题 由于assert引入了额外的检查,降低了程序运行效率,如果上述一段代码拿到编译器中运行就会发现运行时间大大增加,并且过度使用可能降低代码可读性和维护...
在调试结束后,可以通过在包含#include 的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下: #include #define NDEBUG #include 用法总结与注意事项: 1)在函数开始处检验传入参数的合法性 如: int resetBufferSize(int nNewSize) { //功能:改变缓冲区大小, //参数:nNewSize 缓冲区新长度 //返回值:...
因为在Release版本中assert不会被编译,fun1函数将不会被调用,所以正确的用法是: 登录后复制intret;ret= fun1();assert(ret); 当然,这样在Release版本中编译时可能会有警告:ret set but not used。因为并没有使用ret,设置严格就无法通过编译,此时只需加一句: 登录后复制intret;ret= fun1();assert(ret); (...
断言的高级用法 assert宏还可以接受一个额外的表达式,用于输出自定义的错误信息: 实例 #include <iostream> #include <cassert> intmain(){ intx=10; inty=0; // 使用自定义错误信息 assert(y!=0&&"Division by zero error"); intresult=x/y;// 这行代码将不会执行,因为断言已经失败 ...
C语言assert()函数用法总结 C语⾔assert()函数⽤法总结 assert宏的原型定义在<assert.h>中,其作⽤是如果它的条件返回错误,则终⽌程序执⾏,原型定义:#include <assert.h> void assert( int expression );assert的作⽤是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印...
用法 包含头文件:在使用assert前需要包含<assert.h>头文件。 调用assert宏:传入一个条件表达式,如果表达式为假,程序将终止。 #include<assert.h>#include<stdio.h>intmain(){inta =5;intb =0; assert(b !=0);// 断言b不等于0,如果b为0,程序将终止执行intc = a / b;// 这行代码不会被执行,因为上...
assert( fp ); //所以这里出错 fclose( fp ); //程序永远都执行不到这里来 return 0; } 默认情况下,assert宏只有在Debug 版本(内部调试版本)中才能够起作用,而在Release 版本(发行版本)中将被忽略。 三.assert 函数用法总结与注意事项 1.使用 assert 在函数开始处检验传入参数的合法性 ...
C语言中assert的用法 assert是宏,而不是函数。在C的assert.h头文件中。 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。 assert的细节是先计算表达式expr,如果其值为假(即为0),那么它会打印出来assert的内容和__FILE__,LINE, __ASSERT_FUNCTION,然后执行abort()函数使kernel...