用宏设计不变量
使用断言进行健壮的软件开发betwayapp下载安装
在C语言软件开发的过程betwayapp下载安装但是开发人员会在他们的设计或执行中发现bug和问题,或者两者都有。软件开发人员如何在这些年来不断变化的特性请求中构建程序并维护它?在一个更简单的层面上,如何改变软件,代码-程序和算法-不失去原来的功能?
软件开发学到了一个betwayapp下载安装格言:如果你不从错误中吸取教训,历史会重演”。在这篇博文中,您将学习如何编写一个简单的C程序,并在需求不断变化时使用单元测试来捕获这种行为来更新它。这可能是你的开始,令人兴奋的婴儿步骤高级图形编程和游戏开发betwayapp下载安装!
遇到Assert宏
如果你是一个C的初学者,你可以从使用C编译器的小步骤中获益。在Windows下,可以使用Mingw GNU工具链、Borland C/ c++编译器或Microsoft Visual Studio,或者Linux下的shell。首先在shell中输入,
gcc美元——版本
您应该会看到以下输出,然后就可以开始C开发了。betwayapp下载安装
Ubuntu/Linaro 4.6.3-1ubuntu5版权所有(C) 2011自由软件基金会。这是自由软件;有关复制条件,请参阅源代码。没有保修;甚至不是为了适销性或适合某一特定目的。
在文件中输入以下代码行,并将其保存为' assert_true.c '
# include < stdio . h ># include < assert.h >Typedef unsigned char bool;bool TRUE = 1;bool FALSE = 0;int main () {断言(真正的);断言(1 + 1);断言(1 + 1 > 0);断言(1 + 1 - 4);}
要编译和执行程序,您可以运行命令,
$ GCC assert_true.c -o assert_true美元。/ assert_true
除了下一个提示外,您看不到任何实际输出,这意味着您的代码没有触发任何断言失败。让我们用另一个程序再试一次,并将其保存为' assert_fail.c '
# include < stdio . h ># include < assert.h >Typedef unsigned char bool;bool TRUE = 1;bool FALSE = 0;int main () {断言(假);断言(1 - 1);断言(1 - 1 > 0);断言1 - 1 - 4 > 0;}
要编译和执行程序,您可以运行命令,
$ GCC assert_fail.c -o assert_fail.c美元。/ assert_failassert_fail: assert_fail.c:10: main:断言' FALSE'失败。流产
你的经验实验向你展示了断言宏;也就是说,如果表达式assert的求值为True,则为quiet,如果语句的求值为false,则会触发assert_fail并终止程序执行。
断言宏的语法
断言是C语言中的一个宏。要在程序中包含assert函数,可以添加头文件定义,
# include < assert.h >
在这里,assert宏计算表达式,并在c中所述表达式有一个假值时终止执行空,假的,0,然后断言就发生了。只有setjmp、longjmp和atexit等调用在assert()触发后才会完成。要了解更多细节,请阅读Linux中assert函数的手册页。
美元的人断言
应该会出现这样的页面,
Linux程序员手册ASSERT(3)的名字断言——如果断言为假,则中止程序剧情简介# include < assert.h >空白断言(标量表达式);描述如果宏NDEBUG是在是最后一个的时候定义的 包含了assert()宏,它不生成任何代码,因此不执行任何操作在所有。
程序设计
程序员使用assert宏来引发错误,以捕获代码中的意外行为。例如,如果你编写了一个计算立体体积或多边形面积的程序,你可以包含一个断言,即体积或面积分别不应为零;即断言区域> 0
示例-在阶乘函数中使用断言
一个数N的阶乘定义为从1到N的数的乘积;例如N != 1*2*3*…n显然,计算阶乘的一个简单方法是使用for循环,但我们更喜欢使用递归定义。这种递归形式是等价的,准确的,阶乘函数的数学定义使用的符号;例如N != (N - 1) ! * N。这里我们可以使用assert宏来确保factorial的结果总是正的。
显然,用迭代递归的方式来编写这个程序的方法是,
# include < stdio . h ># include < assert.h >Typedef unsigned char bool;bool TRUE = 1;bool FALSE = 0;/*写阶乘的递归方法*/Int fact(Int n){If (n == 0) {返回1;}返回事实(n - 1)*n;}int main () {int fact_val;int我;(我= 0;我< 10;我+ +){fact_val =事实(我);/*阶乘总是非零*/断言(fact_val > 0);printf (" % d != % d \ n ",我fact_val);}返回0;}
运行程序
您可以从源代码网站C.org下载平台的C包,并运行测试和程序,如下所示:$gcc fact_assert.c -o fact_assert && ./fact_assert,是解释代码,然后运行程序的命令
0 != 11 != 12 != 23 != 64 != 245 != 1206 != 7207 != 50408 != 403209 != 362880
错误和修复
程序中的函数有各种各样的错误,其中很少有,
函数在输入为负时确实会爆炸。您需要包含保护或断言。
大输入n的数值溢出
它留给读者作为练习来更新下面的代码,并在C解释器上运行它,以看到一条消息,显示2 unittest已经传递,并且愉快的' OK '消息被打印在屏幕上。
总结
软件开发人员在程序设计中使用断言来强制不变量,并针对回归测试这些程序。C断言宏是在代码中和中强制不变量的关键工具之一测试使程序的用户和开发人员能够在不回归的情况下进行。了解更多关于回归测试和软件设计的信息。学习C可以引导你去做其他事情比如给你的iPhone编程,以及更复杂的项目。