Я впервые использую 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
.
Я раздражительный, потому что результат net составляет менее 100% охвата ветвей. Это просто «путь» или я что-то неправильно понял?