Ich führe gcov über einige C-Code mit einer switch-Anweisung. Ich habe Testfälle geschrieben, um jeden möglichen Pfad durch diese switch-Anweisung abzudecken, aber es meldet immer noch eine Verzweigung in der switch-Anweisung als nicht genommen und weniger als 100% in der Statistik "Mindestens einmal genommen".gcov und switch statements
Hier einige Code-Beispiel zu demonstrieren:
#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;
}
Ich baute mit "gcc temp.c -fprofile-arcs -ftest-coverage
" ran "a
", tat dann "gcov -b -c temp.c
". Der Ausgang zeigt acht Zweige auf dem Schalter an und ein Zweig (Zweig 6) ist nicht belegt.
Was sind all diese Zweige und wie bekomme ich 100% Abdeckung?
Ist der Inhalt der .gcda-Datei überhaupt hilfreich? – Cascabel