C语言 assert 函数 - C语言零基础入门教程 悠悠 2022-09-12 05:53 155阅读 0赞 目录 * 一.assert 函数简介 * 二.assert 函数使用 * 三.assert 函数用法总结与注意事项 * 四.猜你喜欢 > 零基础 C/C++ 学习路线推荐 : [C/C++ 学习目录][C_C_] >> [C 语言基础入门][C] ## 一.assert 函数简介 ## **对于断言,相信大家都不陌生,大多数编程语言也都有断言这一特性。简单地讲,断言就是对某种假设条件进行检查**。assert 宏原型定义: //需要包含头文件 <assert.h> #include <assert.h> /* 描述:如果它的条件返回错误,则终止程序执行 参数: expression : 条件判断或者表达式 */ void assert( int expression ); [assert][] 将通过检查表达式 expression 的值来决定是否需要终止执行程序。也就是说,如果表达式 expression 的值为假(即为 0),那么它将首先向标准错误流 stderr 打印一条出错信息,然后再通过调用 [abort][] 函数终止程序运行;否则,assert 无任何作用。 ## 二.assert 函数使用 ## /******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 assert 函数 //@Time:2021/07/18 07:30 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ #include <stdio.h> #include <assert.h> #include <stdlib.h> int main( void ) { FILE *fp; fp = fopen( "456.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件 assert( fp ); //所以这里不会出错 fclose( fp ); fp = fopen( "123.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败 assert( fp ); //所以这里出错 fclose( fp ); //程序永远都执行不到这里来 return 0; } 默认情况下,[assert][] 宏只有在 Debug 版本(内部调试版本)中才能够起作用,而在 Release 版本(发行版本)中将被忽略。 ## 三.assert 函数用法总结与注意事项 ## **1.使用 assert 在函数开始处检验传入参数的合法性** /******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 assert 函数 //@Time:2021/07/18 07:30 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ int resetBufferSize(int nNewSize) { //功能:改变缓冲区大小, //参数:nNewSize 缓冲区新长度 //返回值:缓冲区当前长度 //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区 assert(nNewSize >= 0); assert(nNewSize <= MAX_BUFFER_SIZE); ... } **2.每个 assert 只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败** /******************************************************************************************/ //@Author:猿说编程 //@Blog(个人博客地址): www.codersrc.com //@File:C语言教程 - C语言 assert 函数 //@Time:2021/07/18 07:30 //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! /******************************************************************************************/ //错误写法 assert(a>=0 && b<=0 && c>0); //正确写法 assert(a>=0); assert(b<=0); assert(c>0); **3. [assert][] 缺点是频繁的调用会极大的影响程序的性能,增加额外的开销。** ## 四.猜你喜欢 ## 1. [C 语言 数组下标越界和内存溢出区别][C _] 2. [C 语言 使用指针遍历数组][C _ 1] 3. [C 语言 指针和数组区别][C _ 2] 4. [C 语言 指针数组和数组指针区别][C _ 3] 5. [C 语言 野指针][C _ 4] 6. [C 语言 函数值传递和址传递][C _ 5] 7. [C 语言 函数不定长参数][C _ 6] 8. [C 语言 函数指针][C _ 7] 9. [C 语言 指针函数][C _ 8] 10. [C 语言 回调函数 callback][C _ _ callback] 11. [C 语言 \#pragma once][C _ _pragma once] 12. [C 语言 \#include <> 与 \#include “” 区别][C _ _include _ _ _include _] 13. [C 语言 const 修饰函数参数][C _ const] 14. [C 语言 const 和 define 区别][C _ const _ define] 15. [C 语言 \#运算符][C _ 9] 16. [C 语言 \#\#运算符][C _ 10] 17. [C 语言 \_\_VA\_ARGS\_\_][C _ _VA_ARGS] 18. [C 语言 \#\#\_\_VA\_ARGS\_\_][C _ _VA_ARGS 1] 19. [C 语言 函数不定长参数 \#\#\_\_VA\_ARGS\_\_经典案例][C _ _ _VA_ARGS] 20. [C 语言 va\_start 宏][C _ va_start] 21. [C 语言 va\_end 宏][C _ va_end] 22. [C 语言 va\_arg 宏][C _ va_arg] 23. [C 语言 vprintf 函数][C _ vprintf] 24. [C 语言 va\_start / va\_end / va\_arg 自定义 printf 函数][C _ va_start _ va_end _ va_arg _ printf] 25. [C 语言 main 函数][C _ main] 26. [C 语言 main 函数参数 main(int argc, char \*argv\[\])][C _ main _ main_int argc_ char _argv] 27. [C 语言 exit 函数][C _ exit] 28. [C 语言 abort 函数][abort] 29. [C 语言 assert 函数][assert] 未经允许不得转载:[猿说编程][Link 1] » [C 语言 assert 函数][assert] [C_C_]: https://www.codersrc.com/c-c [C]: https://www.codersrc.com/c%e8%af%ad%e8%a8%80%e5%9f%ba%e7%a1%80 [assert]: https://www.codersrc.com/archives/9787.html [abort]: https://www.codersrc.com/archives/9733.html [C _]: https://www.codersrc.com/archives/8331.html [C _ 1]: https://www.codersrc.com/archives/8540.html [C _ 2]: https://www.codersrc.com/archives/8564.html [C _ 3]: https://www.codersrc.com/archives/8613.html [C _ 4]: https://www.codersrc.com/archives/8700.html [C _ 5]: https://www.codersrc.com/archives/8738.html [C _ 6]: https://www.codersrc.com/archives/8780.html [C _ 7]: https://www.codersrc.com/archives/8793.html [C _ 8]: https://www.codersrc.com/archives/8809.html [C _ _ callback]: https://www.codersrc.com/archives/8832.html [C _ _pragma once]: https://www.codersrc.com/archives/8931.html [C _ _include _ _ _include _]: https://www.codersrc.com/archives/9045.html [C _ const]: https://www.codersrc.com/archives/9106.html [C _ const _ define]: https://www.codersrc.com/archives/9123.html [C _ 9]: https://www.codersrc.com/archives/9423.html [C _ 10]: https://www.codersrc.com/archives/9438.html [C _ _VA_ARGS]: https://www.codersrc.com/archives/9450.html [C _ _VA_ARGS 1]: https://www.codersrc.com/archives/9480.html [C _ _ _VA_ARGS]: https://www.codersrc.com/archives/9499.html [C _ va_start]: https://www.codersrc.com/archives/9517.html [C _ va_end]: https://www.codersrc.com/archives/9528.html [C _ va_arg]: https://www.codersrc.com/archives/9530.html [C _ vprintf]: https://www.codersrc.com/archives/9533.html [C _ va_start _ va_end _ va_arg _ printf]: https://www.codersrc.com/archives/9575.html [C _ main]: https://www.codersrc.com/archives/9680.html [C _ main _ main_int argc_ char _argv]: https://www.codersrc.com/archives/9687.html [C _ exit]: https://www.codersrc.com/archives/9710.html [Link 1]: https://www.codersrc.com
还没有评论,来说两句吧...