主要内容

无法访问的代码

执行期间无法达到代码

描述

无法访问的代码使用语句覆盖范围来确定在执行期间是否可以达到一部分代码。语句覆盖检查是否执行了程序语句。如果语句具有测试条件,并且至少发生其中一个,则执行并可到达该语句。除非它们具有相应的代码分支,否则不会发生的测试条件不被视为死亡代码。如果未发生所有测试条件,则不会执行语句,并且每个测试条件都是无法访问代码的实例。例如,在转变此代码的陈述,案例3.永远不会发生:

void test1(int a){int tmp = 0;if((a!= 3)){switch(a){case 1:tmp ++;休息;默认值:TMP = 1;休息;/ *案例3落后于案例2,没有死者代码* /案例3:案例2:TMP = 100;休息;void test2(int a){int tmp = 0;if((a!= 3)){switch(a){case 1:tmp ++;休息;默认值:TMP = 1;休息;//案例3的死人代码案件3.: 休息;案例2:TMP = 100;休息;}}}

test1()案例3.落到了案例2.检查没有任何死者代码。在test2(),检查显示了死亡代码案例3.因为这休息未执行下一行的语句。

无法访问代码的其他示例包括:

  • 如果测试条件始终评估为false,则无法达到相应的代码分支。在这一点来源窗格,分支的开口支架是灰色的。

  • 如果测试条件总是评估为true,则条件是冗余的。在这一点来源窗格,条件关键字,如如果,看起来很灰色。

  • 代码遵循a休息或者返回陈述。

如果代码块的开放支架上显示为灰色来源窗格,要突出整个块,双击支架。

检查在函数内的代码上运行。支票功能未调用功能无法到达确定功能本身是否未被调用或从无法访问的代码调用。

例子

展开全部

#define true 1 #define false 0 typedef枚举{中间,结束,等待,init}枚举;枚举输入();枚举Inputref();void操作(枚举,int);int checkinit(枚举engealval){if(stateval == init)返回true;返回false;} int checkwitt(枚举engyval){if(engyval ==等待)返回true;返回false;void main(){枚举mystate = input(),refstate = inputref();if(checkinit(mystate)){if(checketwitt(mystate)){操作(MyState,Checkinit(Refstate));}否则{操作(Mystate,Checkwait(Refstate));}}}

在这个例子中,主要的进入分支if(checkinit(mystate))除非mystate = init.。因此,在那个分支内部,波隆窟®考虑那个my有价值在里面候选人(Mystate)总是回报错误的和第一个分支if(checketpit(mystate))无法到达。

校正 - 删除冗余测试

一种可能的校正是删除冗余测试if(checketpit(mystate))

#define true 1 #define false 0 typedef枚举{中间,结束,等待,init}枚举;枚举输入();枚举Inputref();void操作(枚举,int);int checkinit(枚举engealval){if(stateval == init)返回true;返回false;} int checkwitt(枚举engyval){if(engyval ==等待)返回true;返回false;void main(){枚举mystate = input(),refstate = inputref();if(checkinit(mystate))操作(Mystate,Schpetwait(Refstate)); }
#include  #include  int roll(){return(rand()%6 + 1);void操作(int);void main(){srand(时间(null));int die = roll();如果(die> = 1 && die <= 6)/ *无法访问代码* /操作(DIE);}

在这个例子中,卷()返回1到6之间的值如果测试主要的总是评估真实并是冗余的。如果有相应的话别的分支,灰色错误出现在别的陈述。没有A.别的分支,灰色错误出现在如果关键字指示冗余条件。

校正 - 删除冗余测试

一种可能的校正是消除该条件if(die> = 1 && die <= 6)

#include  #include  int roll(){return(rand()%6 + 1);void操作(int);void main(){srand(时间(null));int die = roll();操作(死);}
#include  #include  #define true 1 #define false 0 int roll1(){return(rand()%6 + 1);} int roll2();空白操作(int,int);void main(){srand(时间(null));int die1 = roll1(),die2 = roll2();如果((die1> = 1 && die1 <= 6)||die2> = 1 && die2 <= 6))/ *无法访问代码* /操作(DIE1,DIE2);}

在这个例子中,roll1()返回1到6之间的值。因此,第一部分如果测试,if((die1> = 1)&&(die1 <= 6)))总是真的。因为两个部分如果测试结合了||, 这如果无论第二部分如何,测试始终是真实的。因此,第二部分如果测试无法访问。

校正 - 将测试结合在一起&&

一种可能的校正是组合两部分如果试验&&代替||

#include  #include  #define true 1 #define false 0 int roll1(){return(rand()%6 + 1);} int roll2();空白操作(int,int);void main(){srand(时间(null));int die1 = roll1(),die2 = roll2();if((die1> = 1 && die1 <= 6)&&(die2> = 1 && die2 <= 6))操作(die1,die2);}

检查信息

团体:数据流
语:C |C ++
首字母缩略词:unr