<VCC笔记> 溢出与unchecked】的更多相关文章

在程序运算或者数据转换的时候,由于各种数据类型有各自的范围,运算的时候,其结果如果超出这个范围,就被称之为溢出.熟悉C#的同志们应该了解用来解决溢出(Overflow)问题的checked,unchecked这两个关键字.而VCC也有类似的设定. 溢出是有规律的,有时候代码原本的设计就是要利用溢出这一特性.但是VCC(以及C#)不愿意默认程序在利用溢出,所以发生溢出的时候会报错.因此有unchecked. #include <vcc.h> unsigned hash(unsigned char…
在普通的编程中,我们是很容易去分析数据的大小,然后给出合理的类型,但是在很多数据库的累计中,缺存在很多隐患,特别是研发时,数据量小,求和也不会溢出,当程序运行几年后,再来一次大求和,隐形的BUG就出来了,所以对于数据的处理上, 在不确定未来的成长性时,建议加上关键字checked,在溢出时,会抛出异常OverflowException,unchecked 就是不检查溢出.…
接下来是第二种注释语句类型Assumption.语法_(Assume E), 这个表达式是让VCC在接下来的额推理中,无视表达式E, 直接认可表达式E. 例: int x, y; _(assume x != 0) y = 100 / x; 在没有那条assumption之前,VCC肯定不会通过验证,因为x可能为0.但是,加了Assumption之后,VCC就选择放弃治疗,将x!=0加入自己的资料库.但是你用assumption糊弄了VCC并没有什么好处,因为当代码实际运行的时候,没有人会管那堆注…
推断操作符 在VCC中,==>符号意味着逻辑推理结果,即离散数学中的蕴涵关系.P==>Q等价于((!P)||(Q)).是非常常用的操作符. 量词(quantifier) 关于量词,这里指的是全称量词(universal quantifier)和存在量词(existential quantifier). 在VCC中全称量词的描述方法是 \forall  T v;E ,意思是“对于任意的T类型的v,表达式E均为真. 例如: _(assert x > 1 && \forall…
这篇博客开始介绍VCC的用法,先用简单的例子介绍VCC的基本语法,当然面对更复杂的程序时,VCC也是将他简化然后分析的. 1.Assertion #include <vcc.h> int main() { int x,y,z; if (x <= y) z = x; else z = y; _(assert z <= x) return ; } 上面的代码使z成为x和y之中的最小值.其中被_(  )包围的注释就是VCC所需要的注释,而且C语言编译器会无视这些注释.因为include的…
最近在学校跟着老师参与了一个代码验证的工作,需要使用Microsoft Research(微软学术)开发的VCC工具,是开源的,托管在Codeplex上.这东西英语资料极其少,中文资料基本没有.我只能看官方给的英文文档.因此,我也就有了心思写几篇简单的博客,也包括文档的一些翻译.留个纪念也好. VCC主页(https://vcc.codeplex.com/) 翻译了一下VCC教程上的简介: “VCC是一个验证环境,用与验证c语言编写的程序.VCC获取一个程序(注释了功能, 断言和类型不变量)并试…
checked: byte b = 255; checked { b++; } Console.WriteLine(b.ToString()); 执行出错:算术运算导致溢出. unchecked: byte b = 255; unchecked { b++; } Console.WriteLine(b.ToString()); 执行不出错:不检查是否溢出 is运算符 is运算符可以检查对象是否与特定的类型兼容 int i=10; if(i is object) { Console.WriteLi…
原文:[CLR via C#]5.1 基元类型 某些数据类在开发中非常常用,以至于许多编译器允许代码已简化的语法来操作它们.例如可以使用以下语法来分配一个整数: System.Int32 a = new System.Int32(); 当然,你肯定不愿意使用这种语法,C#允许使用如下所示的语法: int a = 0; 这种语法不仅增强代码的可读性,而且生成的IL代码和是有System.Int32时生成的IL代码是完全一致的. 编译器直接支持的数据类型称为基元类型(primitive type).…
本节内容: 1.操作符概览: 2.操作符的本质: 3.操作符与运算顺序 4.操作符详解. 1.操作符概览: 操作符(Operator)也译为”运算符” 操作符是用来操作数据的,被操作符操作的数据称为操作数(Operand) 表格从上往下优先级递减,同一行运算符的优先级一样一般按从左到右算, “=”赋值操作符,是先运算右边的值再运算左边的值,所以是最后运算的. 2.操作符的本质 ①操作符的本质是函数(即算法)的”简记法” 假如没有发明”+”只有Add函数,算式3+4+5将可以写成Add(Add(3…
原文:CSS学习笔记:溢出文本省略(text-overflow) 在CSS3中,text-overflow属性的基本语法如下: clip:表示不显示省略文本,简单的裁切. ellipsis:表示对象文本溢出时显示省略标记,省略标记插入的位置是最后一个字符. ellipsis-word:表示当对象文本溢出时显示省略标记,省略标记插入的位置是最后一个词(word). 实际上,text-overflow属性仅用于决定当文本溢出时是否显示省略标记,并不具备样式定义的功能,要实现溢出时产生省略号的效果,应…