C语言的标准函数库:断言库assert.h

这篇具有很好参考价值的文章主要介绍了C语言的标准函数库:断言库assert.h。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言断言库assert.h提供了一些用于调试程序时进行断言的函数。如果断言失败,会输出错误消息并终止程序。

assert.h中主要的函数是assert(),其原型为:

void assert(int expression);

参数expression是一个要测试的表达式,如果表达式的值为0(假),assert()会输出错误消息并终止程序。如果表达式的值为非0(真),则assert()不做任何事情。

以下是一个使用assert()函数的示例代码:

#include <stdio.h>
#include <assert.h>

int main() {
    int a = 5, b = 0;
    assert(b != 0);   // 断言b不为0,如果为0则输出错误消息并终止程序
    printf("a/b = %d\n", a/b);
    return 0;
}

在上面的代码中,我们使用assert()函数来断言b不为0。但是由于b的值为0,程序会输出错误消息并终止:

Assertion failed: b != 0, file assert_example.c, line 7

 assert()宏接收一个整型表达式作为参数,如果表达式为假,就在标准错误stderr中写入一条错误信息,如测试名,文件名,行号等,并调用abort()终止程序

#include <stdio.h>
#include <assert.h>
int Div(int a, int b)
{
    assert(b != 0);
    return a / b;
}
int main()
{
    printf("%d\n", Div(5, 0));
}

设程序名为test.c,编译出的可执行文件为test,运行程序

est: test.c:5: Div: Assertion `b != 0' failed.

执行test文件,其源文件是test.c,第5行,b!=0的测试未通过。

禁用assert 如果认为已经排除了bug,可以关闭assert(),断言库提供了无须更改代码就可开闭assert的机制 通过在导入<assert.h>之前加上如下的宏定义,可以关闭assert断言。

//此宏定义必须在导入assert.h之前
#define NDEBUG
#include <assert.h>

除了assert()函数外,assert.h中还有一些其他的函数,包括:

static_assert():用于在编译时进行断言,其原型为:

_Static_assert(expression, message);

参数expression是一个要测试的表达式,参数message是一个字符串,用于描述断言失败的原因。如果expression的值为0(假),则编译器会输出message并终止编译。 

 assert是在运行时检查,C11新增_Static_assert声明,可以在编译时检查assert()表达式,assert会导致程序的终止,_Static_assert会导致编译的失败 _Static_assert接收两个参数,第一个参数是整型常量表达式,第二个参数是一个字符串,如果第一个表达式求值为假(0或_False),编译器会显示字符串,且不通过编译。

示例:

#include <assert.h>
#include <limits.h>
#include <stdio.h>
_Static_assert(CHAR_BIT == 16, "char不是16位");
int main()
{
    printf("OK\n");
}

假设该文件名为test.c,使用gcc编译它

$ gcc -o test test.c
test.c:4:1: 错误:静态断言错误:"char is not 16bits"
    4 | _Static_assert(CHAR_BIT == 16, "char is not 16bits");
      | ^~~~~~~~~~~~~~

NDEBUG常量:如果定义了该常量,则assert()会被禁用,不会进行断言。一般在发布版本中使用NDEBUG常量来禁用assert()。

以上是assert.h中的一些函数及其用法,更多内容可以查询相关的使用手册。文章来源地址https://www.toymoban.com/news/detail-461025.html

到了这里,关于C语言的标准函数库:断言库assert.h的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python断言(assert)

    Python实用教程_spiritx的博客-CSDN博客 Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。 断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系

    2024年02月09日
    浏览(35)
  • SpringBoot单元测试断言 assertions

    断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别: 1、简单断言 2、数组断言 通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等

    2024年02月05日
    浏览(43)
  • [Python] 断言assert与单元测试

    在Python中,断言(assertion)是一种用于检查程序中的条件是否为真的工具。它用于在程序的特定点处验证一些假设,并在条件为假时触发异常如果断言为真,则程序继续执行;如果断言为假,则引发AssertionError异常。 assert语句的语法如下: 其中,condition是一个布尔表达式,如

    2024年02月02日
    浏览(37)
  • Python-assert(断言)的用法

    时机 防御性的编程 运行时对程序逻辑的检测 合约性检查(比如前置条件,后置条件) 程序中的常量 检查文档 目的 与其让程序在晚些时候崩溃,不如在错误条件出现时,就直接让程序崩溃,这有利于我们对程序排错,提高程序的健壮性。assert 语句通常用于检查用户的输入

    2024年03月22日
    浏览(41)
  • Pytest系列(2) - assert断言详细使用

    与unittest不同,pytest使用的是python自带的assert来进行断言 assert后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败 想在抛出异常之后输出一些提示信息,执行之后就方便查看是什么原因了 执行结果 pytest 里面

    2024年01月20日
    浏览(46)
  • Pytest系列- assert断言详细使用(4)

    在断言方面,pytest框架比其他类似的框架(比如unittest)更加简洁,易用,我想这是选择pytest作为自动化测试框架之一的原因之一。 pytest的assert断言支持使用python内置的assert表达式。可以理解为pytest的断言就是直接使用python自带的assert。 assert后面可以接一

    2024年02月09日
    浏览(36)
  • Unitest单元测试,常用断言方法Assertion

    unittest库提供了很多实用方法来检测程序运行的结果和预期。包括三种类型的方法,每一种都覆盖了典型的类型,比如: 检查相等值、逻辑比较、异常 如果给定的Assertion通过了,那么测试会执行下一行代码。如果给定的assertion没有通过,测试会暂停并且生成错误信息。unitt

    2024年02月05日
    浏览(57)
  • Java断言(assert)的介绍和使用

    在Java编程中,断言(assert)是一种有用的工具,用于在代码中进行条件检查和调试。通过使用断言,我们可以验证程序的逻辑和假设,确保程序在运行时达到预期的结果。本文将介绍Java中的断言概念以及如何使用断言来提高代码的可靠性和调试效率。 断言是一种在程序中添

    2024年02月05日
    浏览(36)
  • 【system verilog】SV Assertion 断言

    SystemVerilog Assertion(SVA)–断言 一言以蔽之:断言是设计属性的描述。 如果一个在模拟中被检查的属性(property)不像我们期望的那样表现,那么这个断言失败。 如果一个被禁止在设计中出现的属性在模拟过程中发生,那么这个断言失败。 一系列的属性可以从设计的功能描述中推

    2024年02月16日
    浏览(39)
  • 【Java高级特性】(二)断言机制 Assertion:关于断言机制最全面的讲解来了~

    掌握断言机制的概念、作用与使用; 掌握如何自定义异常; 1.1 概念 断言机制是一种编程技术,用于在程序中检查和验证假设或前提条件是否为真。在软件开发过程中,断言常被用于确保程序代码按照预期执行,并且在遇到错误或异常情况时能够提供有用的诊断信息。 断言

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包