更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C++培训之assert 断言使用

  • 发布:旭东
  • 来源:网络
  • 时间:2018-04-23 20:12

在研究corepattern需要让程序出core, 因此用到的assert, 记录一下。

写严谨代码时,也可以使用assert进行严格的条件判断。

函数原型:

#include <assert.h> void assert( int expression );

C++ assert()宏的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,

然后通过调用 abort 来终止程序运行。(通常会core, 一般谨慎使用)

断言主要的用处:

1. 可以在预计正常情况下程序不会到达的地方放置断言 :assert false

2. 断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)

3. 使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)

4. 断言core程序时, 会保留完整的信息, 比if...else...在追查问题方面方便.

看代码:


1#include <stdio.h>2#include <assert.h>3#include <string.h>45voidprint(constchar*arg){6assert(arg !=NULL);7intlen =strlen(arg);8char*buf =newchar[len +1];9snprintf(buf,sizeof(buf),"%s", arg);1011assert(strcmp(arg,"test") !=0);12puts(buf);1314delete[] buf;15}1617intmain(intargc,char*argv[]){18if(argc ==2){19print(argv[1]);20}2122return0;23}


设置core文件大小: ulimit -c unlimited

编译: g++ -g test.cpp -o test

执行: ./test test

[liu@localhost test]$ ./test test

test: test.cpp:11: void print(const char*): Assertion `strcmp(arg, "test") != 0' failed.

Aborted (core dumped)

可以用gdb来查看堆栈信息, core状态保存完整,


预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++培训之程序员是怎样炼成的?
下一篇:C++培训之教你如何应对面试题

C语言创建windows窗口实例

C++回调函数是什么?

C++ shared_ptr和动态数组

C语言有哪些关键词,C语言44个关键词大全

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省