C语言中静态断言的使用
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作异常处理的高级形式,用于代码调试。
#define _CRT_SECURE_NO_WARNINGS //关闭安全监察
#include <stdio.h>
#include <stdlib.h>
#include <assert.h> //静态断言的头文件 void main()
{
double db1, db2; printf("输入被除数和除数:\n");
scanf("%lf%lf", &db1, &db2); assert(db2 != ); printf("%f/%f=%f\n", db1, db2, db1 / db2); system("pause");
}
如果除数输入不为0,则程序没有错误,正常运行:

如果输入除数为0,此时触发断言:

同时也可利用宏 NDEBUG 来打开或关闭断言:
#define _CRT_SECURE_NO_WARNINGS //关闭安全监察
#define NDEBUG //关闭静态断言 #include <stdio.h>
#include <stdlib.h>
#include <assert.h> //静态断言的头文件 void main()
{
double db1, db2; printf("输入被除数和除数:\n");
scanf("%lf%lf", &db1, &db2); assert(db2 != ); printf("%f/%f=%f\n", db1, db2, db1 / db2); system("pause");
}
定义宏 NDEBUG 后,断言关闭,输入除数为0,程序仍然可以执行:

C语言中静态断言的使用的更多相关文章
- Django模板语言中静态文件路径的灵活写法
如图,我们看到的时html页面中静态文件的路径,其中/static/是settings.py中的设置: 假设我们将settings.py中的/static/改变了,这样的话我们还需要将html中的/s ...
- C语言中静态库和动态库笔记
库 库,故名思议,是存放东西的地方,其中存放的东西可以被多个人公用. 程序中借用库的概念,描述将代码进行抽取,这种代码被大多数程序使用, 其过程具有一定的模块化.封装.抽象的特征. 按照库的使用方式, ...
- C语言中静态申请内存遇到的错误分析
今天调试代码中,遇到了一个比较奇怪的打印,dump出来的数据只有前四位有值,其他后面的都为零. 出于直觉,应该是内存没有申请到.仔细核对代码之后,果真发现了一个语法错误,就是使用指针的指针时 ,对申请 ...
- C语言中的断言
一.原型定义:void assert( int expression ); assert宏的原型定义在<assert.h>中,其作用是先计算表达式 expression ,如果expres ...
- c语言中静态区,栈,堆的理解
对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆. 很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚. 其实堆栈就是栈,而不是堆. 堆的英文是heap:栈的英文是stac ...
- c语言静态断言
在php中可以通过xdebug来显示详细的错误信息,可以细化到哪个文件哪行代码引起的报错.在C语言里面也可以通过静态断言(assert)来使得调试代码更加方便.关于断言,可以作为一种很强大的调试方式或 ...
- 浅析c语言中的变量(局部变量,外部变量,静态变量,寄存器变量)[转]
c语言中变量分为四类,分别是 1.auto 自动变量 2.static 静态存贮分配变量(又分为内部静态和外部静态) 3.extern 全程变量(用于外部变量说明) 4.register ...
- C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。
除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2:而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000. 取余运算中注意: 该运算只适 ...
- c语言静态断言-定义自己的静态断言
c语言里面可以自己定义静态断言,更加方便的调试代码. 使用静态断言 #include<stdio.h> #include<stdlib.h> #include<asser ...
随机推荐
- 在VMware中为Red Hat配置静态ip并可访问网络-Windows下的VMware
首先确保虚拟网卡(VMware Network Adapter VMnet8)是开启的,然后在windows的命令行里输入“ipconfig /all”,找到VMware Network Adapte ...
- codeforce468DIV2——D. Peculiar apple-tree
题意给你一颗树,开始时每个结点都有一个小球,每一秒钟每个小球都往上滚一层,当两个球在同一个结点的时候会被消去,如果三个五个七个等在同一个结点的化消去后只剩一个. 分析 这对我来说就TM是英语阅读理解哇 ...
- laravel 模型关联之(多对多)
多对多 多对多就相当于一个专题Topic有多个文章,但是这多个文章又属于多个专题, 而且多对都必须有一个表是他们之间的关联关系表PostTopic Post表和Topic表之间没有直接的关联,而且通过 ...
- string基本字符系列容器(一)
C++STL提供了string基本字符系列容器来处理字符串,可以把string理解成字符串类,它提供了添加,删除,替换,查找和比较等丰富的方法. 使用string容器,需要头文件包含声明#includ ...
- cocos2d-x 在vs2010下的环境配置
cocos2d-x编译完成之后生成了一堆动态库,在window下分别为.dll , .lib ,其中*lib是在编译的时候需要链接的,*.dll是在运行的时候依赖的.所以当我们创建一个cocos2d- ...
- SpringMVC Controller 的简单应用
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Ubuntu下配置Apache的Worker模式
其实Apache本身的并发能力是足够强大的,但是Ubuntu默认安装的是Prefork模式下的Apache.所以导致很多人后面盲目的去 安装lighttpd或者nginx一类替代软件.但是这类软件有一 ...
- Linux yum失败解决
Linux yum失败解决 问题: 在CentOS 5.5中需要使用yum安装程序,出现错误: There was a problem importing one of the Python modu ...
- Luogu 3350 [ZJOI2016]旅行者
BZOJ 4456 听若干个大佬讲过$n$遍终于写掉了. 我把时限基本上跑满了2333…… 分治 + 最短路. 首先我们去分治这个矩形格子,找到一条长边把它对半切,对切开的边上的每一个点跑一遍最短路然 ...
- oracle 序列初始化的plsql块脚本
declare seq_name dba_sequences.SEQUENCE_NAME%TYPE; cursor mycur is select * from dba_sequences where ...