我第一次使用gcovr并且遇到了这个代码的一个令人困惑的问题:
for (int i = 0; i < 4; i++)
{
bool a = i & 1;
bool b = i & 2;
if (a && b)
printf("a and b\n");
else if (a && !b)
printf("a not b\n");
else
printf("the other two\n");
}
(代码按您的预期工作,所以我不打算粘贴输出。)
但是,gcovr 决定我没有完整的分支覆盖:
✓✓ 5 for (int i = 0; i < 4; i++)
{
4 bool a = i & 1;
4 bool b = i & 2;
✓✓✓✓ 4 if (a && b)
1 printf("a and b\n");
✓✓✓✗ 3 else if (a && !b)
1 printf("a not b\n");
else
2 printf("the other two\n");
}
显然,四个排列中的一个不是由 处理的else if
,而只是因为它已由第一个处理if
。
我脾气暴躁,因为最终结果是低于 100% 的分支覆盖率。这只是“方式”还是我误会了什么?