我正在运行gcov对一些包含switch语句的C代码进行覆盖率测试。我编写了测试用例以覆盖该switch语句中的每条路径,但它仍报告switch语句中的一个分支未被执行并且“至少执行一次”统计数据小于100%。
这里是一些演示样例代码:
#include "stdio.h"
void foo(int i)
{
switch(i)
{
case 1:printf("a\n");break;
case 2:printf("b\n");break;
case 3:printf("c\n");break;
default: printf("other\n");
}
}
int main()
{
int i;
for(i=0;i<4;++i)
foo(i);
return 0;
}
我使用 "gcc temp.c -fprofile-arcs -ftest-coverage
" 进行构建,运行了 "a
",然后执行了 "gcov -b -c temp.c
"。输出结果显示 switch 中有八个分支,其中一个(第6个分支)未被执行。
所有这些分支都是什么意思,如何实现100%的覆盖率?