iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言断言函数assert()的使用方法是什么
  • 634
分享到

C语言断言函数assert()的使用方法是什么

2023-06-25 15:06:46 634人浏览 安东尼
摘要

本篇内容介绍了“C语言断言函数assert()的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  在C语言库函数中提供了一个辅

本篇内容介绍了“C语言断言函数assert()的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  在C语言库函数中提供了一个辅助调试程序的小型库,它是由assert()宏组成,接收一个整形表达式作为参数。如果表达式的值为假(非零),则assert()宏就在标准错误流(stderr)中写入一条错误信息,并调用abort()函数终止程序。

  下面通过一个简单的例子来看一下assert()的用法。

int main(){int n = 1;assert(n>=0);printf("%d \r\n",n);system("pause");return 0;}

  在assert()中表达式判断的条件是 n > 0 ,那么当整形变量n的值小于0时,就说明表达式为假,断言函数就会起作用。这里先试一下正常情况,将n的值设置为1,输出结果如下:

C语言断言函数assert()的使用方法是什么

  接下来将 n 的值改为 -1,继续测试

C语言断言函数assert()的使用方法是什么

  此时程序异常终止了。下面详细分析一下,这个函数的执行过程。

C语言断言函数assert()的使用方法是什么

  在assert.h头文件中可以查看到assert()的原型,这里有两个原型,一个是当定义了 _UNICODE 或者 UNICODE 时调用的是第一个assert(),当没有定义时,调用的是第二个assert()。由于在头文件中没有定义 _UNICODE 或 UNICODE,所以这里调用的是第二个assert。下面开始分析这条宏定义语句。

#define assert(_Expression) (void) ((!!(_Expression)) ||  (_assert(#_Expression,__FILE__,__LINE__),0))void __cdecl _assert (const char *_Message, const char *_File, unsigned _Line);

  首先 assert 中传入了一个参数 _Expression ,接着还有有一条语句,里面有两部分由或运算符连接。对于或运算符 || 来说,当第一个条件成立时就不会执行第二个条件,只有当第一个条件不成立时才会执行第二条语句。

((!!(_Expression)) ||  (_assert(#_Expression,__FILE__,__LINE__),0))

  首先来看第一个判断条件 (!!(_Expression)),给传入的参数取了两次非,也就相当于变量本身,当 _Expression 为真时,就不会执行 第二个条件,只有 _Expression 为假时,才会执行第二个条件。在程序中当 n > 0 成立时就不会执行第二个条件,当 n > 0 不成立时,才会执行第二条语句,所以在上面测试中,当 n = -1 时,程序才会异常终止。

  接下来看第二个条件 (_assert(#_Expression,FILE,LINE),0) 这是一个函数,它的原型是:

void __cdecl _assert (const char *_Message, const char *_File, unsigned _Line);

  这个函数有三个参数,根据这三个参数的名称大概可以推断出,第一个参数是用来存储信息内容,第二个参数是用来表示当前文件的详细信息,第三个参数表示代码中那一行出错。

C语言断言函数assert()的使用方法是什么

  这三个参数和控制台打印的内容相符合,Program 后面跟着的是当前运行的可执行文件路径,File 后面跟着的是报错的文件路径,Line 后面跟着的是 出错的具体位置,说明在 test6.c 文件中第16行程序出现了错误,最后一行提示出错的表达式 为 n>=0 ,说明变量n 大于等于0这个条件不成立,也就是当前变量n的值小于0,所以引发了程序异常。

  通过上面的分析可以看出,assert()对应调试程序来说很有帮助,像这种隐藏在代码中的错误在编译程序的时候,编译器是检测不出来的,只有当程序执行的时候才会发现。所以通过assert()来检测表达式就可以快速的定位程序的bug。

  加入不想使用assert()来检测了,不需要修改代码,只需要在assert.h中定义 NDEBUG就行了。

C语言断言函数assert()的使用方法是什么

 在assert.h中添加宏定义,继续运行程序。

C语言断言函数assert()的使用方法是什么

  此时n的值为-1,但是程序正常的打印出了-1,并没有报错。说明assert()不检测错误了。这个从头文件中也可以看出。

C语言断言函数assert()的使用方法是什么

  当定义了NDEBUG之后,**assert(_Expression)**执行的具体函数就变成了 ((void)0),也就是啥也不干了。所以当在头文件中定义了NDEBUG之后,assert()的检测功能就自动失效了。这样在调试程序的时候,只需要一条语句就可以开启或者关闭调试信息输出了。

“C语言断言函数assert()的使用方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C语言断言函数assert()的使用方法是什么

本文链接: https://www.lsjlt.com/news/305577.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言断言函数assert()的使用方法是什么
    本篇内容介绍了“C语言断言函数assert()的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  在C语言库函数中提供了一个辅...
    99+
    2023-06-25
  • C语言assert断言函数的作用是什么
    C语言中的assert断言函数主要用于在代码中插入一些检查点,用于检查某个条件是否为真。如果条件为真,那么断言通过,程序继续执行。如...
    99+
    2023-09-11
    C语言
  • c语言assert函数的作用是什么
    assert函数是C语言标准库中的一种调试工具,其作用是在程序运行时检查某个条件是否为真,如果条件为假,则终止程序运行并输出错误信息...
    99+
    2023-05-25
    c语言assert函数 c语言
  • C语言断言函数assert()的学习笔记
      在C语言库函数中提供了一个辅助调试程序的小型库,它是由assert()宏组成,接收一个整形表达式作为参数。如果表达式的值为假(非零),则assert()宏...
    99+
    2022-11-12
  • c语言之assert()函数怎么使用
    `assert()`函数是C语言标准库 `` 中的一个宏,用于在程序中插入断言。 断言是程序员在编写代码时用于检查程序的逻辑错误的一...
    99+
    2023-10-24
    c语言
  • C语言函数的使用方法是什么
    本文小编为大家详细介绍“C语言函数的使用方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言函数的使用方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、函数的嵌套调用在定义函数时,一个函数内...
    99+
    2023-06-30
  • C语言SetConsoleCursorInfo函数使用方法是什么
    本篇文章为大家展示了C语言SetConsoleCursorInfo函数使用方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。函数的接口BOOL WINAPI SetCons...
    99+
    2023-06-21
  • C语言SetConsoleCursorPosition函数使用方法是什么
    这篇文章给大家介绍C语言SetConsoleCursorPosition函数使用方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。函数接口BOOL WINAPI SetConsoleCurso...
    99+
    2023-06-21
  • C语言GetStdHandle函数使用方法是什么
    今天就跟大家聊聊有关C语言GetStdHandle函数使用方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。函数的接口HANDLE WINAPI GetSt...
    99+
    2023-06-21
  • C语言assert函数的作用有哪些
    C语言assert函数的作用有以下几个:1. 断言程序中的某个条件是正确的,如果条件不成立,程序会立即终止并输出错误信息。2. 在程...
    99+
    2023-06-13
    assert函数
  • assert在C语言中的作用是什么
    在C语言中,assert的作用是用于在程序中验证假设条件的正确性。它用于检查断言是否为真,如果断言为假,则会导致程序终止,并输出相应...
    99+
    2023-09-20
    assert C语言
  • C语言中的assert怎么使用
    在C语言中,`assert`是一个宏,用于在程序中插入断言语句,用于检查程序中的特定条件是否满足。如果断言条件为真,则程序继续执行;...
    99+
    2023-08-12
    C语言 assert
  • c语言子函数调用的方法是什么
    在C语言中,可以使用以下两种方法调用子函数:1. 值传递(Call by Value):将实参的值复制给形参,子函数中对形参的修改不...
    99+
    2023-09-13
    c语言
  • c语言调用子函数的方法是什么
    在C语言中,调用子函数的方法可以通过以下步骤实现:1. 首先,在主函数或其他需要调用子函数的函数中,声明子函数的原型。原型包括子函数...
    99+
    2023-10-08
    c语言
  • c语言判断回文数的方法是什么
    判断一个数是否为回文数的一种简单方法是将该数转化为字符串,然后比较字符串的前一半与后一半是否相等。具体步骤如下: 将输入的数转化为...
    99+
    2023-10-24
    c语言
  • c语言realloc函数的用法是什么
    realloc函数是用于重新分配内存块的大小的函数。它可以用于扩大或缩小已经分配的内存块的大小。realloc函数的用法如下:voi...
    99+
    2023-09-14
    c语言
  • c语言strcpy函数的用法是什么
    strcpy函数是C语言中的一个字符串处理函数,其原型如下:```cchar* strcpy(char* dest, const c...
    99+
    2023-09-14
    c语言
  • c语言strlen函数的用法是什么
    strlen函数用来计算字符串的长度,不包括字符串末尾的空字符('\0')。其用法如下:```c#include size_t st...
    99+
    2023-09-14
    c语言
  • c语言ioctl函数的用法是什么
    在C语言中,ioctl函数是用来控制设备的系统调用函数。它的原型如下:cint ioctl(int fd, unsigned lon...
    99+
    2023-10-18
    c语言
  • c语言abs函数的用法是什么
    c语言中的abs函数用于返回一个整数的绝对值。其语法如下:int abs(int n);其中,n为要求绝对值的整数。abs函数的返回...
    99+
    2023-10-21
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作