2

次のプログラムを「gcc-fprofile-arcs-ftest-coveragetest.c」でコンパイルしました。

int main() {
  int a = 1;
  int b = 1;
  a && b;
}

プログラムの実行後、「gcov -bc test.c」を呼び出すと、4つのブランチの50%が少なくとも1回は取得されたことが報告されます。なぜgcovは、プログラムに2つではなく4つのブランチがあると言うのですか?次のプログラムを実行した後、gcovは、2つのブランチの50%が少なくとも1回は取得されたことを正しく報告します。

int main() {
  int a = 1;
  if (a)
    a = 0;
  else
    a = 1;
}
4

1 に答える 1

2

どうやら次のようにgcov考えa&&bています:

if(a) { // branch 1
    if(b) { // branch 2
        1; 
    } else { // branch 3
        0;
    }
} else { // branch 4
    0;
}

実際のCPU命令が単一のブランチに変換されることはかなり確信していますが。

于 2012-07-01T18:19:02.447 に答える